home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-04 | 100.4 KB | 4,023 lines |
- section Main,code
- jmp main_startup
-
- ;settings
- ;main_programname: MACRO ; Sets program name (Window..)
- ; dc.b 'Program name'
- ; ENDM
- ;
- ;main_sysinfooff ; Don't show sysinfo
- ;main_reqinfooff ; Don't show requirements
- ;main_endinfooff ; Don't show end info
- ;main_debugoff ; disables debugger
- ;
- ;main_introcode: MACRO ; Code to run after system startup
- ;main_endcode: MACRO ; Code to run before system closedown
- ;
- ;main_skipsysinfo ; Skip system test
- ;main_cacheoff ; Disables caches (If existing)
- ;main_dostextoff ; Disables ALL dos output (Text)
- ;main_systemon ; Leaves system on no system disable
- ;main_vectortrap = %<Vectors to trap> <Default bits>
- ; Vector bits: 9 = Bus error 1
- ; 8 = Address error 1
- ; 7 = Illegal command 1
- ; 6 = Division by zero 1
- ; 5 = CHK command 1
- ; 4 = TRAPV command 0
- ; 3 = Privilege violation 0
- ; 2 = Trace 0
- ; 1 = Axxx command emulation 1
- ; 0 = Fxxx command emulation 1
- ;main_trap7 ; Use level 7 to exit
- ;main_reqproc = 2 ; Requiered processor 1=010 or greater
- ;main_reqfpu ; Set to require FPU
- ;main_reqmmu ; Set to require Extended Chip Set
- ;main_reqaga ; Set to require AGA chipset
- ;main_reqecs ; Set to require Extended Chip Set
- ;main_reqpal ; Set to require PAL video mode
- ;main_reqntsc ; Set to require NTSC video mode
- ;main_reqfast = 4096 ; How many KB Fast RAM that is needed
- ;main_reqchip = 2048 ; How many KB Chip RAM that is needed
- ;
- ;main_rgbfadeto = $0RGB ; Fade to colour at start (12 bit)
- ;main_rgbfadefrom = $0RGB ; Fade from colour at end (12 bit)
- ;main_faderoff ; Disable colour fade (At start and End)
- ;main_noexit ; Disable exit function until end
- ;main_usermb ; Call Debug with RMB
- ;main_uselmb ; Call debug with Left mouse button
- ;main_length = xxxx ; max run time.
- ;main_disableint ; Disable all interrupt stuff
- ;main_short ; Shortest startup
- ;main_meteroff ; Disables meter code (Saving memory)
- ;main_meteron ; Enables the frame meter
- ;main_playeroff ; Player off
- ;main_disabledos ; Disables DOS routines (Load,Execute)
- ;main_loader ; Use this switch when load proggy
-
- ********************************************************** Replayer settings **
-
- IFND main_loader
- IFND main_playeroff
- IFND main_ownplayer
-
- main_musicinit: MACRO ; Command to start module (A0=Mod ptr)
- bsr PPR_Init
- ENDM
-
- main_musicplay: MACRO ; Command to run every frame (CIA=None)
- move.w #$8200,$dff096
- bsr PPR_Music
- ENDM
-
- main_musicstop: MACRO ; Command to Stop Music
- bsr PPR_End
- ENDM
-
- PPR_68020 = 1
- PPR_NotePlayer = 0
-
- include "demo:System/ProRunner.S"
- ENDIF
- ENDIF
- ENDIF
- *******************************************************************************
-
- ;------------------------------------------------------------------ Defaults --
- ;----------------------------------------------- Main short --
- IFD main_short
- IFND main_sysinfooff ; Don't show sysinfo
- main_sysinfooff ; Don't show sysinfo
- ENDIF
- IFND main_disabledos ; Don't use dos functions
- main_disabledos ; Don't use dos functions
- ENDIF
- IFND main_meteroff ; Don't use meter
- main_meteroff ; Don't use meter
- ENDIF
- IFND main_reqinfooff ; Don't show requirements
- main_reqinfooff ; Don't show requirements
- ENDIF
- IFND main_endinfooff ; Don't show end info
- main_endinfooff ; Don't show end info
- ENDIF
- IFND main_debugoff ; disables debugger
- main_debugoff ; disables debugger
- ENDIF
- IFND main_dostextoff ; Disables ALL dos output (Text)
- main_dostextoff ; Disables ALL dos output (Text)
- ENDIF
- IFND main_disableint ; Disable all interrupt stuff
- main_disableint ; Disable all interrupt stuff
- ENDIF
- IFND main_playeroff ; Player off
- main_playeroff ; Player off
- ENDIF
- IFND main_faderoff ; Player off
- main_faderoff ; fader off
- ENDIF
- IFND main_skipsysinfo ; Skip system test
- main_skipsysinfo ; Skip system test
- ENDIF
- ENDIF
- ;------------------------------------------- main_uselmb --
- IFND main_uselmb
- main_usermb
- ENDIF
-
- ;------------------------------------------- main_vectortrap --
- IFND main_vectortrap
- main_vectortrap = %1111100011
- ENDIF
-
- ;------------------------------------------ main_dostextoff --
-
- IFD main_dostextoff ; Disables ALL dos output (Text)
- IFND main_sysinfooff ; Don't show sysinfo
- main_sysinfooff ; Don't show sysinfo
- ENDIF
- IFND main_reqinfooff ; Don't show requirements
- main_reqinfooff ; Don't show requirements
- ENDIF
- IFND main_endinfooff ; Don't show end info
- main_endinfooff ; Don't show end info
- ENDIF
-
-
- ENDIF
- ;----------------------------------------------------------- main_textvaron --
- IFND main_debugoff
- main_textvaron
- ENDIF
-
- IFD main_debugoff
- IFND main_dostextoff
- main_textvaron
- ENDIF
- ENDIF
- ;-------------------------------------------------------- main_skipsysinfo --
- IFD main_skipsysinfo
- IFND main_sysinfooff ; Don't show sysinfo
- main_sysinfooff ; Don't show sysinfo
- ENDIF
- IFND main_reqinfooff ; Don't show requirements
- main_reqinfooff ; Don't show requirements
- ENDIF
- ENDIF
-
- IFD main_debugoff
- IFND main_meteroff
- main_meteroff
- ENDIF
- ENDIF
-
-
-
- ********************************************************************* Macros **
-
- macro_sync: MACRO ; Kills: d7 -- Macro_Sync
- IFND main_meteroff
- movem.l d0-a0,-(a7)
- move.l main_dataptr,a0
- move.l 44(a0),a0
- jsr (a0)
- move.l main_dataptr,a0
- move.l d0,48(a0)
- ENDIF
- .waitsync\@: move.l $dff004,d7
- and.l #$1ff00,d7
- cmp.l #305*$100,d7
- bne.s .waitsync\@
- IFND main_meteroff
- move.l main_dataptr,a0
- move.l 40(a0),a0
- jsr (a0)
- movem.l (a7)+,d0-a0
- ENDIF
- ENDM
-
- macro_waitvbl: MACRO ; Kills: d7 -- Macro_WaitVbl
- .waitsync1\@: move.l $dff004,d7
- and.l #$1ff00,d7
- cmp.l #305*$100,d7
- bne.s .waitsync1\@
- .waitsync2\@: move.l $dff004,d7
- and.l #$1ff00,d7
- cmp.l #305*$100,d7
- beq.s .waitsync2\@
- ENDM
-
- ************************************************************** START OF CODE **
-
- IFND main_loader
- main_startup:
- IFND main_short
- IFD main_fakearg
- lea .fakearg,a0
- move.l a0,a1
- moveq.l #0,d0
- .countloop: addq.l #1,d0
- tst.b (a1)+
- bne.s .countloop
- bra.s .okletsgo
- .fakearg: main_fakearg
- dc.b 0
- even
- .okletsgo:
- ENDIF
- ENDIF
- bra.w main_sysinit
- main_sysstartupok:;--------------------------------------- System startup ok --
- IFD main_introcode
- main_introcode
- ENDIF
- IFND main_skipsysinfo
- bsr.w main_showsysinfo
- bsr.w main_checkreq
- tst.w main_ok2run
- bne.s main_skipprog
- ENDIF
- IFND main_systemon
- IFND main_disableint
- IFD main_length
- move.l #main_length,main_timer
- ENDIF
- ENDIF
- bsr.w main_disablesystem
- ENDIF
- move.l a7,main_oldsp
- IFD main_meteron
- bsr.w main_framemeteron
- ENDIF
- jsr main_start
- IFND main_systemon
- move.l main_dataptr,a0
- move.w #13,56(a0) ; main_trappedvector
- ENDIF
- jmp main_cont
- main_exit:
- IFND main_systemon
- move.l main_dataptr,a0
- move.w #0,56(a0) ; main_trappedvector
- ENDIF
- main_cont: move.l main_oldsp,a7
- IFD main_meteron
- bsr.w main_framemeteroff
- ENDIF
- IFND main_systemon
- bsr.w main_restoresystem
- ENDIF
- *--------------------------------------------------------- Close down system --
- main_skipprog:
- IFND main_systemon
- IFND main_endinfooff
- IFND main_skipsysinfo
- bsr.w main_exitmsg
- ENDIF
- ENDIF
- ENDIF
- IFD main_endcode
- main_endcode
- ENDIF
- main_dealloc:
- IFND main_systemon
- IFND main_debugoff
- move.l $4,a6 ; Exec base address
- move.l main_configscr,d0 ; Get address
- beq.s .nodealloc ; Nothing allocated
- move.l d0,a1 ; Address ptr
- move.l #20480+4096,d0 ; Dealloc 1 bpl
- jsr -210(a6) ; Exec FreeMem
- .nodealloc:
- move.l kbd_macroptr,d0
- beq.s .nodealloc2
- move.l d0,a1
- move.l #16384,d0
- jsr -210(a6) ; Exec FreeMem
- .nodealloc2:
- ENDIF
- ENDIF
- main_closedos: tst.b main_conuse ; Was console window openend?
- beq.s .noconsoleopen ; Not.
- move.l main_dataptr,a6
- move.l 64(a6),d1 ; main_conhandler,d1 ; Get ConHandler
- move.l 60(a6),a6 ; main_doshandler,a6 Get DosHandler
- jsr -36(a6) ; Dos close file
- .noconsoleopen: move.l $4,a6 ; Exec lib handler
- move.l main_dataptr,a1
- move.l 60(a1),a1 ; main_doshandler,a1 Get dos handler
- jsr -414(a6) ; Exec close lib
- main_nodoslib: rts
- ENDIF
-
- *********************************************************** MAIN_LOADER CODE **
- IFD main_loader
-
- main_startup: move.l a7,main_oldsp
- bsr.w dos_readaddy
- move.l d0,a0
- bsr.w main_setnewdata
- cmp.l #'TBL.',main_idcode
- bne.w main_noloader
- move.l $4.w,a6 ; Exec base
- tst.b 297(a6) ; Test processor flags
- beq.s .novbr ; No vbr = 68000
- lea main_getvbr,a5 ; Ptr to supervisor routine
- jsr -30(a6) ; Supervisor
- .novbr: lea $dff000,a6
- move.w #$0040,$9a(a6) ; Disable blitter intena
- .w8blt: btst #6,$02(a6)
- bne.s .w8blt
- move.w #$0040,$96(a6)
- .w8: move.l $04(a6),d0
- and.l #$1ff00,d0
- cmp.l #$100*305,d0
- bne.s .w8
- move.w #$7de0,$96(a6)
- move.l main_exitaddy,main_oldexit ; Save old exit
- move.l #main_exit,main_exitaddy
- clr.w main_lock
- clr.l main_returnvalue
- jsr main_start
- move.l #'OK!!',main_returnvalue
- bra.s main_doit
- main_exit: st.b main_lock
- move.l #'EXIT',main_returnvalue
- main_doit: st.b main_lock
- move.l main_oldexit,main_exitaddy ; Restore old exit
- move.l main_oldsp,a7
- lea $dff000,a6
- clr.l main_vblint
- clr.l main_vblint2
- move.w #$0040,$9a(a6) ; Disable blitter intena
- .w8blt: btst.b #6,$02(a6)
- bne.s .w8blt
- move.w #$0040,$96(a6) ; Disable BLT DMA
- .w8: move.l $04(a6),d0
- and.l #$1ff00,d0
- cmp.l #$100*305,d0
- bne.s .w8
- move.w #$7de0,$96(a6)
- ; move.w #$0040,$9c(a6)
- move.w #$8200!%1000000,$96(a6) ; Enable blitter DMA
- clr.l main_bltint
- move.w #$8008,$9a(a6) ; Enable timers and ports
- bsr.w main_restoredata
- main_noloader:
- moveq.l #0,d0
- rts
-
- main_setnewdata:;in: a0=Ptr to dosinfo block ptr
- move.l a0,main_olddataptr
- move.l (a0),a2 ; a0=Start of data block
- move.l a2,main_oldinfo
- lea $dff000,a6
- .w8: move.l $04(a6),d0
- and.l #$1ff00,d0
- cmp.l #$100*280,d0
- bne.s .w8
- subq.l #8,a2
- lea main_datablockstart,a1
- move.w #(main_datablockend-main_datablockstart)/4-1,d0
- .loop: move.l (a2)+,(a1)+
- dbra d0,.loop
- move.l #main_infoblock,(a0) ; Set new data ptr
- rts
-
- main_restoredata:
- move.l main_olddataptr,a0
- move.l main_oldinfo,a2
- lea $dff000,a6
- .w8: move.l $04(a6),d0
- and.l #$1ff00,d0
- cmp.l #$100*280,d0
- bne.s .w8
- move.l a2,a3
- subq.l #8,a2
- lea main_datablockstart,a1
- move.w #(main_datablockend-main_datablockstart)/4-1,d0
- .loop: move.l (a1)+,(a2)+
- dbra d0,.loop
- move.l a3,(a0) ; Set new data ptr
- rts
-
- main_oldinfo: dc.l 0
- main_oldexit: dc.l 0
-
- main_olddataptr:dc.l 0 ; Old data ptr
-
- ENDIF
-
- ************************************************ Main_Loader & Main Code+DATA **
-
-
- main_getvbr: dc.l $4e7a0801 ;movec vbr,d0
- move.l d0,main_vbrbase
- rte
-
- IFND main_systemon
-
- IFND main_disabledos
-
- *************************************************************************
- * Non OS loading and executing routines *
- *************************************************************************
-
- dos_load: ;in: a0=Ptr to file name,a1=Ptr to address
- ; d0=Length
- clr.w dos_error
- st.b main_lock
- move.l d0,.savel
- move.w #$8200!%1000000,$dff096 ; Enable blitter DMA
- move.w #$8008,$dff09a ; Enable Ports Interrupt
- move.l main_doshandler,a6
- move.l #1005,d2
- move.l a1,.oldd1
- move.l a0,d1
- jsr -30(a6) ; Open file
- tst.l d0
- beq.s .error
- move.l .oldd1,d2
- move.l d0,.oldd1
- move.l d0,d1
- move.l .savel,d3
- jsr -42(a6) ; Read
- tst.l d0
- beq.s .error
- move.l .oldd1,d1
- jsr -36(a6)
- lea $dff000,a6
- tst.b $02(a6)
- .wblit: btst #6,$02(a6)
- bne.s .wblit
- .w8: move.l $04(a6),d0
- and.l #$1ff00,d0
- cmp.l #$100*307,d0
- bne.s .w8
- move.w #%1000000,$96(a6)
- move.w #$0008,$9a(a6)
- clr.w main_lock
- rts
- .oldd1: dc.l 0
- .savel: dc.l 0
- .error: st.b dos_error
- move.w #15,main_trappedvector
- move.l dos_exitaddy,a0
- clr.w main_lock
- jmp (a0)
-
- dos_execute: ;in: a0=Ptr to filename
- clr.w dos_error
- st.b main_lock
- move.w #$0040,$dff09c ; Clear Req bits
- move.w #$8200!%1000000,$dff096 ; Enable blitter DMA
- move.w #$8008,$dff09a ; Enable Ports Interrupt
- move.l main_doshandler,a6 ; Get dos handler
- moveq.l #0,d2 ; STD In=0
- move.l main_conhandler,d3 ; STD Out=0
- move.l a0,d1 ; File Name Ptr
- move.l #main_dataptr,d0
- bsr.w dos_writeaddy
- jsr -222(a6) ; DOS execute
- lea $dff000,a6
- tst.b $02(a6)
- .wblit: btst #6,$02(a6)
- bne.s .wblit
- .w8: move.l $04(a6),d0
- and.l #$1ff00,d0
- cmp.l #$100*307,d0
- bne.s .w8
- move.w #$7de0,$96(a6)
- move.w #$0008,$9a(a6)
- clr.w main_lock
- cmp.l #'EXIT',main_returnvalue
- beq.w .exit
- cmp.l #'OK!!',main_returnvalue
- bne.s .error
- clr.l main_returnvalue
- rts
- .error: st.b dos_error
- move.w #15,main_trappedvector
- .exit: move.l dos_exitaddy,a0
- jmp (a0)
- dos_exitcp: rts
-
- dos_exitaddy: dc.l dos_exitcp
- dos_error: dc.w 0
-
- dos_writeaddy:; in: d0=addy
- move.w #$e000,$dff106
- move.b d0,$dff181
- lsr.l #8,d0
- move.b d0,$dff183
- lsr.l #8,d0
- move.b d0,$dff185
- lsr.l #8,d0
- move.b d0,$dff187
- rts
-
- dos_readaddy:; out: d0=addy
- move.w #$0100,$dff104
- move.w #$e000,$dff106
- move.b $dff187,d0
- lsl.l #8,d0
- move.b $dff185,d0
- lsl.l #8,d0
- move.b $dff183,d0
- lsl.l #8,d0
- move.b $dff181,d0
- move.w #$0000,$dff104
- rts
- ENDIF ; main_disabledos
-
-
- ENDIF ; main_systemon
-
- main_dataptr: dc.l main_infoblock ; Ptr to info block
- ; NEVER CHANGE ANY POSITIONS IN DATA FROM HERE.
- main_datablockstart:
- main_returnvalue:dc.l 0 ;-8 ; Return value
- main_idcode: dc.l 'TBL.' ;-4 ; TBL id code
- main_infoblock: ;------------------------- Info block - (External data ptrs) --
- main_counter: dc.l 0 ;0 ; Main counter (Up 1/VBL)
- counter: dc.l 0 ;4 ; Counter (Up 1/VBL)
- timer: dc.l 0 ;8 ; Timer (Down 1/VBL)
- main_timer: dc.l 0 ;12 ; Main timer
- main_vblint: dc.l 0 ;16 ; Custom VBL int ptr
- main_vblint2: dc.l 0 ;20 ; Custom VBL int ptr
- main_bltint: dc.l 0 ;24 ; Custom BLT int ptr
- main_copint: dc.l 0 ;28 ; Custom COP int ptr
- main_module: dc.l -1 ;32 ; Module ptr
- main_lock: dc.w 0,0 ;36 ; 0=Ok 2 exit,Other NOT ok.
- IFND main_loader
- main_stimerptr: dc.l main_starttimer ;40 ; Code ptr for start timer
- main_gtimerptr: dc.l main_gettimer ;44 ; Code ptr for get timer
- ENDIF
- IFD main_loader
- main_stimerptr: dc.l 0 ;40 ; Code ptr for start timer
- main_gtimerptr: dc.l 0 ;44 ; Code ptr for get timer
- ENDIF
- main_framespeed:dc.l 0 ; 48 ; Frames speed
- main_exitaddy: dc.l main_exit ; 52
- main_trappedvector:dc.w 0,0 ; 56 ; #of trapped vector
- main_doshandler:dc.l 0 ; 60 ; Dos handler
- main_conhandler:dc.l 0 ; 64 ; Console handler
- main_datablockend:
- ; TO HERE !!! IF SO SYSTEM CRASHES WILL APPEND.
-
- main_vbrbase: dc.l 0 ; VBR Base
- main_oldsp: dc.l 0 ; Saved SP (For exit)
-
- ********************************************************************************
-
-
- IFND main_loader
-
- main_starttimer:move.l main_dataptr,a0
- move.l (a0),main_savecount
- move.l $dff004,main_savecount2
- rts
-
- main_gettimer: move.l main_dataptr,a0
- move.l (a0),d0
- move.l $dff004,d1
- move.l main_savecount,d2
- move.l main_savecount2,d3
- and.l #$1ffff,d1
- and.l #$1ffff,d3
- sub.l d3,d1
- sub.l d2,d0
- mulu #313,d0
- lsl.l #8,d0
- add.l d1,d0
- lsr.l #1,d0
- move.l d0,main_timer2
- rts
-
- *************************************************************************
- * OS related routines *
- *************************************************************************
-
- main_sysinit: move.l a7,main_errsp ; Error sp
- move.l #main_nodoslib,main_erraddy;Error addy
- tst.b (a0)
- bne.s .noclistart
- st.b .clistartflag
- .noclistart:
- IFND main_short
- tst.w d0
- beq.s .skippa
- move.l a0,main_argv ; Save arguments
- clr.b -1(a0,d0.w)
- bsr.w main_getargs
- ENDIF
- .skippa: lea main_doslibname,a1 ; Ptr to "dos.library\0"
- move.l $4,a6 ; Exec lib handler
- jsr -408(a6) ; Exec Open lib "dos.library"
- tst.l d0 ; 0=Error
- beq.w main_error ; Handle error
- move.l main_dataptr,a0
- move.l d0,60(a0) ; main_doshandler Save dos handler
- tst.w .clistartflag
- beq.s .clistart
- move.l #main_closedos,main_erraddy; Error addy
- move.l #main_consolname,d1 ; Window name (Consol)
- move.l #$3ed,d2 ; Open mode (New)
- move.l main_dataptr,a6
- move.l 60(a6),a6 ; main_doshandler,a6 Get dos handler
- jsr -30(a6) ; Dos open file
- tst.l d0 ; Error ? =0
- beq.s .otherstart ; No con openend
- st.b main_printok ; Set print & con flag
- st.b main_conuse
- move.l main_dataptr,a0
- move.l d0,64(a0) ; main_conhandler ; Con handler=Outp Handler
- bra.w .otherstart ; Skip Cli start
- .clistart: move.l main_dataptr,a6
- move.l 60(a6),a6 ; main_doshandler,a6 Get doshandler
- jsr -60(a6) ; Dos get current output
- tst.l d0 ; Error ?
- beq.s .otherstart ; Yes don't set flags
- not.b main_printok ; Set print flag
- move.l main_dataptr,a0
- move.l d0,64(a0) ; main_conhandler ; Output handler
- .otherstart:
- IFND main_skipsysinfo
- bsr.w main_sysinfo ; Get system info
- ENDIF
- move.l #main_dealloc,main_erraddy;Error addy
- IFND main_debugoff
- IFND main_systemon
- move.l $4.w,a6 ; Exec base address
- move.l #16384,d0 ; Reserve one bpl
- moveq.l #0,d1 ; must be in chipram
- bset #16,d1
- jsr -198(a6) ; Exec allocmem
-
-
- move.l d0,kbd_macroptr
- move.l #20480+4096,d0 ; Reserve one bpl
- moveq.l #2,d1 ; must be in chipram
- jsr -198(a6) ; Exec allocmem
- move.l d0,main_configscr ; Save adress
- tst.l d0
- beq.s .skippascr
- lea main_conbplptrs+2,a0 ; Ptr to bplptrs
- move.w d0,4(a0) ; Set ...
- swap.w d0 ; .. bpl..
- move.w d0,(a0) ; ..ptrs
- swap.w d0 ; Clear...
- move.l d0,a0
- add.l #20480,d0 ; Ptr to null sprite
- lea main_consprptr+2,a1
- move.l d0,d1
- add.l #44+8,d1
- swap.w d1
- move.w d1,(a1)
- swap.w d1
- move.w d1,4(a1)
- addq.l #8,a1
- moveq.l #6,d1
- .sprloop: tst.w d1
- bne.s .skipspr
- addq.l #8,d0
- .skipspr: swap.w d0
- move.w d0,(a1)
- swap.w d0
- move.w d0,4(a1)
- addq.l #8,a1
- dbra d1,.sprloop
- move.l d0,main_mousesprptr
- move.l d0,a2
- lea main_mousesprite,a1
- moveq.l #2*44/4-1,d0
- .copysprloop: move.l (a1)+,(a2)+
- dbra d0,.copysprloop
- moveq.l #0,d0
- move.w #(20480+8)/4-1,d1
- .clrbloop: move.l d0,(a0)+
- dbra d1,.clrbloop ;..screen
- .skippascr:
- ENDIF
- ENDIF
- bra.w main_sysstartupok
- .clistartflag: dc.w 0
-
-
- IFND main_short
- main_print: ;a0=ptr to text (0 to end)
- movem.l d0-a6,-(a7)
- IFND main_dostextoff
- tst.b main_printok ; Ok to print ?
- beq.s .skip ; Nope...
- moveq.l #0,d3 ; Calc..
- move.l a0,a1
- .calcloop: tst.b (a1)+
- beq.s .calcok
- addq.l #1,d3
- bra.s .calcloop ;..str length
- .calcok: tst.l d3 ; Length 0 ?
- beq.s .skip ; Nothing to print
- move.l a0,d2 : Buffer ptr
- move.l main_dataptr,a0
- move.l 64(a0),d1 ; main_conhandler,d1 ; Get File handler
- move.l main_dataptr,a6
- move.l 60(a6),a6 ; main_doshandler,a6 ; Get dos handler
- jsr -48(a6) ; Dos write file
- .skip:
- ENDIF
- movem.l (a7)+,d0-a6
- rts
- ENDIF
-
- main_error: move.l main_erraddy,a0
- move.l main_errsp,a7
- jmp (a0)
-
-
-
-
- IFND main_short
- main_getargs: moveq.l #0,d6
- lea main_arglist,a3
- moveq.l #15,d7
- .loop: bsr.w .getarg
- tst.l d0
- beq.s .exit
- move.l a1,(a3)+
- addq.l #1,d6
- dbra d7,.loop
- .exit: move.l d6,main_argcount
- rts
- .getarg:
- .findloop: move.b (a0)+,d0
- beq.s .rts
- cmp.b #32,d0
- bls.s .findloop
- cmp.b #"'",d0
- beq.s .quote
- cmp.b #"`",d0
- beq.s .quote
- cmp.b #'"',d0
- beq.s .quote
- move.l a0,a1
- subq.l #1,a1 ; a1=Ptr
- .noquote: cmp.b #32,(a0)+
- bhi.s .noquote
- tst.b -1(a0)
- beq.s .lastarg
- clr.b -1(a0)
- moveq.l #-1,d0
- rts
- .quote: move.l a0,a1 ; a1=Ptr
- .findq: move.b (a0)+,d0
- cmp.b #32,d0
- blo.s .exitq
- cmp.b #"'",d0
- beq.s .exitq
- cmp.b #"`",d0
- beq.s .exitq
- cmp.b #'"',d0
- bne.s .findq
- .exitq: tst.b -1(a0)
- beq.s .lastarg
- clr.b -1(a0)
- moveq.l #-1,d0
- rts
- .lastarg: clr.b (a0) ; Last arg
- moveq.l #-1,d0
- rts
- .rts: moveq.l #0,d0 ; d0=0 ==> No more args
- rts
-
-
- main_copymem: ;a0=Source
- ;a1=Dest
- ;d0=Size in bytes
- divu #11*8,d0 ; d0=Size/12*8
- beq.s .skiplong
- subq.w #1,d0
- moveq.l #11*4,d1
- sub.l d1,a1
- .longloop: REPT 2
- movem.l (a0)+,d2-d7/a2-a6
- add.l d1,a1
- movem.l d2-d7/a2-a6,(a1)
- ENDR
- dbra d0,.longloop
- add.l d1,a1
- .skiplong: clr.w d0
- swap.w d0
- divu #4,d0
- beq.s .skiplongword
- subq.w #1,d0
- .longwordloop: move.l (a0)+,(a1)+
- dbra d0,.longwordloop
- .skiplongword: swap.w d0
- tst.w d0
- beq.s .skipbytes
- subq.w #1,d0
- .byteloop: move.b (a0)+,(a1)+
- dbra d0,.byteloop
- .skipbytes: rts
-
- ENDIF
-
-
-
-
- IFND main_skipsysinfo
- main_sysinfo:
- ;----------------------------------------------- Get processors --
- move.l $4,a6 ; Exec base
- move.b 531(a6),d0
- move.b d0,main_powerfreq+1
- cmp.b #50,d0
- beq.w .powok
- IFD main_textvaron
- move.l #main_txtpow60,main_powptr
- ENDIF
- .powok: move.w 296(a6),d0 ; Get system flags
- btst #0,d0 ; 010?
- beq.s .no010 ; Nope
- move.w #1,main_processor ; Yepp write proc number
- IFD main_textvaron
- move.l #main_txt68010,main_procptr ; Set text ptr
- ENDIF
- .no010: btst #1,d0 ; 020?
- beq.s .no020 ; Nope
- move.w #2,main_processor ; Yepp write proc number
- IFD main_textvaron
- move.l #main_txt68020,main_procptr ; Set text ptr
- ENDIF
- .no020: btst #2,d0 ; 030?
- beq.s .no030 ; Nope
- move.w #3,main_processor ; Yepp write proc number
- IFD main_textvaron
- move.l #main_txt68030,main_procptr ; Set text ptr
- ENDIF
- .no030: btst #4,d0 ; 881?
- beq.s .no881 ; Nope
- move.w #1,main_coproc ; Yepp write coproc number
- IFD main_textvaron
- move.l #main_txt68881,main_coprocptr ; Set text ptr
- ENDIF
- .no881: btst #5,d0 ; 882?
- beq.s .no882 ; Nope
- move.w #1,main_coproc ; Yepp write coproc number
- IFD main_textvaron
- move.l #main_txt68882,main_coprocptr ; Set text ptr
- ENDIF
- .no882: btst #3,d0 ; 040?
- beq.s .no040 ; Nope
- move.w #4,main_processor ; Yepp write proc number
- IFD main_textvaron
- move.l #main_txt68040,main_procptr ; Set text ptr
- ENDIF
- move.w #1,main_coproc ; 040 built in
- IFD main_textvaron
- move.l #main_txt68040b,main_coprocptr ; Set text ptr
- ENDIF
- .no040: btst #7,d0 ; 060?
- beq.s .no060 ; Nope
- move.w #6,main_processor ; Yepp write proc number
- IFD main_textvaron
- move.l #main_txt68060,main_procptr ; Set text ptr
- ENDIF
- move.w #1,main_coproc ; 060 built in
- IFD main_textvaron
- move.l #main_txt68060b,main_coprocptr ; Set text ptr
- ENDIF
- .no060: btst #6,d0 ; 851?
- beq.s .no851 ; Nope
- move.w #1,main_mmu ; Yepp write mmu
- IFD main_textvaron
- move.l #main_txt68851,main_mmuptr ; Set text ptr
- ENDIF
- .no851:;------------------------------------------------------- Get gfx chip --
- lea $dff07d,a0 ; LisaID
- move.b (a0),d0
- move.b d0,d1
- moveq.l #63,d2
- .gfxloop: and.b (a0),d1
- dbra d2,.gfxloop
- cmp.b d1,d0
- bne.s .orgdenise
- btst #1,d0
- bne.s .noecs
- move.w #1,main_ecs
- IFD main_textvaron
- move.l #main_txtgfxecs,main_gfxptr
- ENDIF
- .noecs: btst #2,d0
- bne.s .noaga
- move.w #1,main_aga
- IFD main_textvaron
- move.l #main_txtgfxaga,main_gfxptr
- ENDIF
- .noaga:
- .orgdenise: move.l $4,a0
- move.b 530(a0),d0
- move.b d0,main_refresh+1
- cmp.b #50,d0
- beq.w .refok
- IFD main_textvaron
- move.l #main_txtvbl60,main_refreshptr
- ENDIF
- .refok:;--------------------------------------------------------- Get memory --
- move.l $4,a6 ; Exec base
- move.l 62(a6),main_chipmem
-
-
- moveq.l #4,d1
- bset #19,d1
- jsr -216(a6)
- move.l d0,d6
- bra.s .okmem
- move.l d0,-(a7) ; Save mem
- moveq.l #0,d1
- moveq.l #16,d0
- jsr -198(a6)
- tst.l d0
- beq.s .dotest
- move.l d0,-(a7)
- moveq.l #4,d1
- bset #19,d1
- jsr -216(a6)
- move.l (a7)+,a1
- move.l d0,-(a7)
- moveq.l #16,d0
- jsr -210(a6)
- move.l (a7)+,d0
- move.l (a7)+,d1
- bne.s .dotest
- moveq.l #4,d1
- bset #19,d1
- jsr -216(a6)
- move.l d0,d6
- bra.s .okmem
- .dotest: sub.l a1,a1
- moveq.l #31,d7 ; Number of banks
- moveq.l #0,d6 ; Fast mem found
- move.l #512*1024,d5 ; Bank size
- .findloop: movem.l d5-a1,-(a7)
- jsr -534(a6)
- movem.l (a7)+,d5-a1
- btst #0,d0 ; Is it fast mem ?
- beq.s .memskip
- add.l d5,d6
- .memskip: add.l d5,a1
- dbra d7,.findloop
- .okmem: move.l d6,main_fastmem
- moveq.l #0,d0
- moveq.l #2,d1
- bset #17,d1
- jsr -216(a6)
- move.l d0,main_availchip
- moveq.l #0,d0
- moveq.l #4,d1
- bset #17,d1
- jsr -216(a6)
- move.l d0,main_availfast
- rts
- ENDIF
-
- IFND main_skipsysinfo
- main_showsysinfo:
- IFND main_sysinfooff
- lea main_txthi,a0
- bsr.w main_print
- lea main_txtpower,a0
- bsr.w main_print
- move.l main_powptr,a0
- bsr.w main_print
- lea main_txtproc,a0
- bsr.w main_print
- move.l main_procptr,a0
- bsr.w main_print
- lea main_txtcoproc,a0
- bsr.w main_print
- move.l main_coprocptr,a0
- bsr.w main_print
- lea main_txtmmu,a0
- bsr.w main_print
- move.l main_mmuptr,a0
- bsr.w main_print
- lea main_txtaga,a0
- bsr.w main_print
- move.l main_gfxptr,a0
- bsr.w main_print
- lea main_txtvbl,a0
- bsr.w main_print
- move.l main_refreshptr,a0
- bsr.w main_print
- lea main_txtmemchip,a0
- bsr.w main_print
- move.l main_chipmem,d0
- lsr.l #8,d0
- lsr.l #2,d0
- bsr.w main_printdec
- lea main_txtmemfast,a0
- bsr.w main_print
- move.l main_fastmem,d0
- lsr.l #8,d0
- lsr.l #2,d0
- bsr.w main_printdec
- lea main_txtkblf,a0
- bsr.w main_print
- ENDIF
- rts
- ENDIF
-
- IFND main_skipsysinfo
- main_checkreq: moveq.l #0,d7 ; Nothing checked
- moveq.l #0,d6 ; 0 If passed
- IFND main_reqinfooff
- lea main_txtreq,a0
- bsr.w main_print
- ENDIF
- IFD main_reqproc
- IFND main_reqinfooff
- lea main_txtproc,a0
- bsr.w main_print
- ENDIF
- move.w #main_reqproc,d0
- mulu #6,d0
- add.l #main_txt68000,d0
- move.l d0,a0
- IFND main_reqinfooff
- bsr.w main_print
- lea main_txtplus,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- cmp.w #main_reqproc,main_processor
- bge.s .ok00
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok00:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
-
- IFD main_reqfpu
- IFND main_reqinfooff
- lea main_txtcoproc,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- tst.w main_coproc
- bne.s .ok01
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok01:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
- IFD main_reqfpu
- IFND main_reqinfooff
- lea main_txtmmu,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- tst.w main_mmu
- bne.s .ok02
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok02:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
-
- ;MEM
-
-
- IFD main_reqfast
- IFND main_reqinfooff
- lea main_txtfast,a0
- bsr.w main_print
- move.l #main_reqfast,d0
- bsr.w main_printdec
- lea main_txtkb,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- cmp.l #main_reqfast*1024,main_availfast
- bhs.s .ok00a
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok00a:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
-
- IFD main_reqchip
- IFND main_reqinfooff
- lea main_txtchip,a0
- bsr.w main_print
- move.l #main_reqchip,d0
- bsr.w main_printdec
- lea main_txtkb,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- cmp.l #main_reqchip*1024,main_availchip
- bhs.s .ok00b
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok00b:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
-
-
- IFD main_reqaga
- IFND main_reqinfooff
- lea main_txtaga,a0
- bsr.w main_print
- lea main_txtagaplus,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- tst.w main_aga
- bne.s .ok03
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok03:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
- IFD main_reqecs
- IFND main_reqaga
- IFND main_reqinfooff
- lea main_txtaga,a0
- bsr.w main_print
- lea main_txtecsplus,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- tst.w main_ecs
- bne.s .ok04
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok04:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
- ENDIF
- IFD main_reqpal
- IFND main_reqinfooff
- lea main_txtvbl,a0
- bsr.w main_print
- lea main_txtvbl50,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- cmp.w #50,main_refresh
- beq.s .ok05
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok05:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
- IFD main_reqntsc
- IFND main_reqpal
- IFND main_reqinfooff
- lea main_txtvbl,a0
- bsr.w main_print
- lea main_txtvbl60,a0
- bsr.w main_print
- ENDIF
- lea main_txtpassed,a0
- cmp.w #60,main_refresh
- beq.s .ok06
- moveq.l #-1,d6
- lea main_txtfault,a0
- .ok06:
- IFND main_reqinfooff
- bsr.w main_print
- ENDIF
- moveq.l #1,d7
- ENDIF
- ENDIF
-
- tst.l d7
- bne.s .skip
- IFND main_reqinfooff
- lea main_txtnoreq,a0
- bsr.w main_print
- ENDIF
- rts
-
-
- .skip:
- IFD main_textvaron
- lea main_txtreqpass,a0
- ENDIF
- tst.w d6
- beq.s .ok
- IFD main_textvaron
- lea main_txtreqfault,a0
- ENDIF
- IFND main_systemon
- move.l main_dataptr,a1
- move.w #11,56(a1) ; main_trappedvector
- ENDIF
- .ok: move.w d6,main_ok2run
-
- IFND main_reqinfooff
- bsr.w main_print
- IFD main_systemon
- lea main_txtblank,a0
- bsr.w main_print
-
- ENDIF
- ENDIF
- rts
- ENDIF
-
- IFND main_short
- main_printdec: ;in: d0=Number
- IFND main_dostextoff
- lea main_txtdec,a0
- move.l a0,a1
- move.l a1,a2
- moveq.l #0,d1
- .loop: divu #10,d0
- swap.w d0
- add.b #48,d0
- addq.l #1,d1
- move.b d0,(a2)+
- clr.w d0
- swap.w d0
- tst.l d0
- bne.s .loop
- .ok: move.b #0,(a2)
- asr.w #1,d1
- tst.w d1
- beq.s .skipp
- subq.w #1,d1
- .sloop: move.b (a1),d0
- move.b -(a2),(a1)+
- move.b d0,(a2)
- dbra d1,.sloop
- .skipp:
- bra.w main_print
- ENDIF
- rts
- ENDIF
-
- main_turncacheoff:
- dc.l $4e7a1002 ;movec cacr,d1
- move.l d1,main_cachereg
- rte
-
- main_turncacheon:
- move.l main_cachereg,d0
- dc.l $4e7b0002 ;movec d0,cacr
- rte
-
- IFND main_systemon ; End almost at ottom of source
- IFND main_endinfooff
- IFND main_skipsysinfo
- main_exitmsg: lea main_txtendc,a0
- bsr.w main_print
- move.l main_dataptr,a0
- move.w 56(a0),d0 ; main_trappedvector,d0
- lsl.w #3,d0
- lea main_vectorlist,a0
- move.l (a0,d0.w),a0
- bsr.w main_print
- lea main_txtafter,a0
- bsr.w main_print
- move.l main_counter2,d0
- divu main_powerfreq,d0
- swap.w d0
- clr.w d0
- swap.w d0 ; d0=#of seconds
- divu #60,d0
- swap.w d0
- move.w d0,d1
- clr.w d0
- swap.w d0 ; d0=#of mins
- swap.w d1
- clr.w d1
- swap.w d1 ; d1=#of secs mod 60
- exg.l d0,d1
- moveq.l #0,d7
- tst.w d1
- beq.s .skipmin
- move.l d0,-(a7)
- move.l d1,d0
- move.l d0,-(a7)
- bsr.w main_printdec ; Write mins
- move.l (a7)+,d0
- lea main_txtminute,a0
- cmp.l #1,d0
- beq.s .skipmins
- lea main_txtminutes,a0
- .skipmins: bsr.w main_print
- move.l (a7)+,d0
- beq.s .skipmin
- move.l d0,-(a7)
- lea main_txtand,a0
- bsr.w main_print
- move.l (a7)+,d0
- moveq.l #-1,d7
- .skipmin: tst.w d0
- beq.s .skipsec
- move.l d0,-(a7)
- bsr.w main_printdec ; Write secs
- move.l (a7)+,d0
- lea main_txtsecond,a0
- cmp.l #1,d0
- beq.s .skipsecs
- lea main_txtseconds,a0
- .skipsecs: move.l d0,-(a7)
- bsr.w main_print
- move.l (a7)+,d0
- .skipsec: tst.l d0
- bne.s .ok1
- tst.l d7
- bne.s .ok1
- lea main_txtnonetime,a0
- bsr.w main_print
- .ok1: lea main_txtend,a0
- bsr.w main_print
- rts
- ENDIF
- ENDIF
-
-
- *************************************************************************
- * Disable/Restore OS routines *
- *************************************************************************
-
- main_disablesystem:;---------------------------- Get VBR and turn caches off --
- move.l $4,a6 ; Exec base
- tst.b 297(a6) ; Test processor flags
- beq.s .novbr ; No vbr = 68000
- lea main_getvbr,a5 ; Pytr to supervisor routine
- jsr -30(a6) ; Supervisor
- IFD main_cacheoff
- btst.b #0,297(a6) ; Test 68010 flag
- bne.s .novbr ; 68010 has no cache
- move.w #1,main_cacheok ; Set flag
- lea main_turncacheoff,a5 ; Ptr to supervisor routine
- jsr -30(a6) ; Supervisor
- lea main_txtcache,a0 ; Write message
- bsr.w main_print
- ENDIF
- .novbr:;--------------------------------------- Open GFX lib and save stuff --
- lea main_gfxlibname,a1 ; Ptr to gfxlib name
- jsr -408(a6) ; Open gfx lib
- tst.l d0 ; Error?
- beq.w main_error ; Yepp :(
- move.l d0,main_gfxhandler ; Save base
- move.l d0,a6 ; Gfx base ptr
- move.l $22(a6),main_oldactscreen ; Screen ptr
- move.l $26(a6),main_oldcopper1 ; Save oldcopper1
- move.l $32(a6),main_oldcopper2 ; Save oldcopper2
- move.l a6,-(a7)
- lea $dff000,a6 ; Custom base address
- tst.b $02(a6) ; Used for OLD agnus bug
- .waitblit: btst #6,$02(a6) ; Test BLTBSY
- bne.s .waitblit ; blitter isn't finnished
- move.w $1c(a6),main_oldintena ; Save intena
- move.w $10(a6),main_oldadkcon ; Save adkcon bits
- move.w #$7fff,$9a(a6) ; Disable ALL interrupts
- IFND main_short
- bsr.w main_fadeoutwb
- ENDIF
- move.l (a7)+,a6
- sub.l a1,a1 ; Clear a1
- jsr -222(a6) ; Load View
- jsr -270(a6) ; WaitTOF
- jsr -270(a6) ; WaitTOF
- move.b $ec(a6),d0 ; Get chip rev no
- and.b #$03,d0 ; ECS ?
- beq.s .noECS ; ECS not found
- move.l 370(a6),a2
- move.w $28(a2),main_oldbeamcon ; Save beam control
- .noECS:;------------------------------------------------- Save DMA and Stuff --
- lea $dff000,a6 ; Custom base address
- move.w $1e(a6),main_oldintreq ; Save intreq
- move.w #$7fff,$9e(a6) ; Disable ALL interrupt reqs
- move.w $2(a6),main_olddmacon ; Save old dma con
- bsr.w main_storevectors ; Save system vectors
- tst.b $02(a6) ; Used for OLD agnus bug
- .waitblit1: btst #6,$02(a6) ; Test BLTBSY
- bne.s .waitblit1 ; blitter isn't finnished
- .waitvbl: move.l $04(a6),d0 ; Get Rast pos
- and.l #$1ff00,d0 ; Mask out vertical bits
- cmp.l #301*256,d0 ; Wait row
- bne.s .waitvbl ; Not reached
- move.w #$7fff,$96(a6) ; disable ALL dma
- move.w #$0020,$1dc(a6) ; Normal view mode
- .waitvbl1: move.l $04(a6),d0 ; Get Rast pos
- and.l #$1ff00,d0 ; Mask out vertical bits
- cmp.l #300*256,d0 ; Wait row
- bne.s .waitvbl1 ; Not reached
- lea $140(a6),a5
- moveq.l #$10,d1
- moveq.l #$7,d2
- moveq.l #0,d3
- .sprclloop: move.l d3,(a5)
- add.l d1,a5
- dbra d2,.sprclloop
- Move.b #0,$DE0000 ; ramsey
- IFND main_disableint
- move.w #$c020,$9a(a6) ; Enable level 3 int
- ENDIF
- move.b $bfe001,main_oldbfe001
-
- bset.b #1,$bfe001
- rts
-
- main_oldbfe001: dc.w 0
-
- main_restoresystem:;---------------------------------------- Restore DMA etc --
- IFND main_playeroff
- main_musicstop
- ENDIF
- move.b main_oldbfe001,d0
- btst #1,d0
- bne.s .skipled
- bclr.b #1,$bfe001
- .skipled:
- IFND main_short
- bsr.w main_fadeinwbfix
- ENDIF
- lea $dff000,a6 ; Custom base
- move.w #$7fff,$9a(a6) ; Disable all interrupts intena
- tst.b $02(a6) ; OLD agnus bug
- .waitblit: btst #6,$02(a6) ; Test BLTBSY
- bne.s .waitblit ; Blitter not finnished
- .waitvbl: move.l $04(a6),d0 ; Get Rast pos
- and.l #$1ff00,d0 ; Mask out vertical bits
- cmp.l #301*256,d0 ; Wait row
- bne.s .waitvbl ; Not reached
- move.w #$7fff,$96(a6) ; Clear ALL DMA
- move.l #$7fff7fff,$9c(a6) ; Clear INTREQ & ADKCON
- or.w #$8000,main_oldadkcon ; Set set bit
- or.w #$c000,main_oldintena ; Set set bit
- or.w #$8000,main_oldintreq ; Set set bit
- or.w #$8200,main_olddmacon ; Set set bit
- bsr.w main_restorevectors ; Restore system vectors
- .waitvbl2: move.l $04(a6),d0 ; Get Rast pos
- and.l #$1ff00,d0 ; Mask out vertical bits
- cmp.l #300*256,d0 ; Wait row
- bne.s .waitvbl2 ; Not reached
- move.w main_olddmacon,$96(a6) ; Restore DMA
- move.w main_oldadkcon,$9e(a6) ; Restore ADKCON
- move.w main_oldintena,$9a(a6) ; Restore INTENA
- move.w main_oldintreq,$9c(a6) ; Restore INTREQ
- move.l main_oldcopper1,$80(a6) ; Restore system copper 1
- move.l main_oldcopper2,$84(a6) ; Restore system copper 2
- move.w #0,$88(a6) ; Strobe copper
- ;--------------------------------------------------- Fix view & close doslib --
- move.l main_gfxhandler,a6 ; Get GFXlib handler
- move.l main_oldactscreen,a1 ; Get actscreen
- jsr -222(a6) ; Set system View
- jsr -270(a6) ; WaitTOF
- jsr -270(a6) ; WaitTOF
- move.l a6,a1 ; Gfx handler
- move.l $4,a6 ; Exec base
- jsr -414(a6) ; Exec close lib
- IFND main_short
- bsr.w main_fadeinwb
- ENDIF
- rts
-
- IFND main_short
-
- IFND main_rgbfadeto
- main_rgbfadeto = $000
- ENDIF
-
- IFND main_rgbfadefrom
- main_rgbfadefrom= $000
- ENDIF
-
- main_fadeoutwb:
- IFND main_faderoff
- move.l main_oldcopper1,a0
- moveq.l #0,d0
- bsr.w .loop
- move.l main_oldcopper2,a0
- bsr.w .loop
- move.l d0,main_wbcolours
- mulu #6,d0 ; #of bytes to reserve !!
- move.l $4.w,a6 ; Exec base address
- moveq.l #0,d1
- jsr -198(a6) ; Exec allocmem
- move.l d0,main_wbaddress
- tst.l d0
- beq.w .skip
- move.l d0,a1
- move.l main_oldcopper1,a0
- bsr.w .loop2
- move.l main_oldcopper2,a0
- bsr.w .loop2
- moveq.l #$f,d0
- .fadeloop: move.l main_wbcolours,d1
- subq.w #1,d1
- move.l main_wbaddress,a0
- .sync: move.l $dff004,d2
- and.l #$1ff00,d2
- cmp.l #308*$100,d2
- beq.s .sync
- .sync1: move.l $dff004,d2
- and.l #$1ff00,d2
- cmp.l #308*$100,d2
- bne.s .sync1
- .colloop: move.w (a0)+,d2
- move.w d2,d3
- move.w d2,d4
- move.w d2,d5
- and.w #$f00,d3
- lsr.w #8,d3
- and.w #$f0,d4
- lsr.w #4,d4
- and.w #$f,d5
- sub.w #(main_rgbfadeto&$f00)>>8,d3
- sub.w #(main_rgbfadeto&$f0)>>4,d4
- sub.w #(main_rgbfadeto&$f),d5
- muls d0,d3
- muls d0,d4
- muls d0,d5
- divs #$f,d3
- divs #$f,d4
- divs #$f,d5
- add.w #(main_rgbfadeto&$f00)>>8,d3
- add.w #(main_rgbfadeto&$f0)>>4,d4
- add.w #(main_rgbfadeto&$f),d5
- lsl.w #8,d3
- lsl.w #4,d4
- or.w d4,d3
- or.w d5,d3
- move.l (a0)+,a1
- move.w d3,(a1)
- dbra d1,.colloop
- dbra d0,.fadeloop
- .skip: rts
- .loop: move.l (a0)+,d1
- swap.w d1
- cmp.l #$fffeffff,d1
- beq.s .exit
- btst #0,d1
- bne.s .loop
- cmp.w #$0088,d1
- beq.s .exit
- cmp.w #$008a,d1
- beq.s .exit
- cmp.w #$180,d1
- blo.s .loop
- cmp.w #$1be,d1
- bhi.s .loop
- addq.l #1,d0
- bra.s .loop
- .exit: rts
- .loop2: move.l (a0)+,d1
- swap.w d1
- cmp.w #$ffff,d1
- beq.s .exit2
- btst #0,d1
- bne.s .loop2
- cmp.w #$0088,d1
- beq.s .exit2
- cmp.w #$008a,d1
- beq.s .exit2
- cmp.w #$180,d1
- blo.s .loop2
- cmp.w #$1be,d1
- bhi.s .loop2
- swap.w d1
- move.w d1,(a1)+
- subq.l #2,a0
- move.l a0,(a1)+
- addq.l #2,a0
- bra.s .loop2
- .exit2:
- ENDIF
- rts
-
- main_fadeinwb:
- IFND main_faderoff
- tst.l main_wbaddress
- beq.w .exit
- moveq.l #$f,d0
- .fadeloop: move.l main_wbcolours,d1
- subq.w #1,d1
- move.l main_wbaddress,a0
- .sync: move.l $dff004,d2
- and.l #$1ff00,d2
- cmp.l #308*$100,d2
- beq.s .sync
- .sync1: move.l $dff004,d2
- and.l #$1ff00,d2
- cmp.l #308*$100,d2
- bne.s .sync1
- .colloop: move.w (a0)+,d2
- move.w d2,d3
- move.w d2,d4
- move.w d2,d5
- and.w #$f00,d3
- lsr.w #8,d3
- and.w #$f0,d4
- lsr.w #4,d4
- and.w #$f,d5
- sub.w #(main_rgbfadefrom&$f00)>>8,d3
- sub.w #(main_rgbfadefrom&$f0)>>4,d4
- sub.w #(main_rgbfadefrom&$f),d5
- move.w d0,d2
- neg.w d2
- add.w #$f,d2
- muls d2,d3
- muls d2,d4
- muls d2,d5
- divs #$f,d3
- divs #$f,d4
- divs #$f,d5
- add.w #(main_rgbfadefrom&$f00)>>8,d3
- add.w #(main_rgbfadefrom&$f0)>>4,d4
- add.w #(main_rgbfadefrom&$f),d5
- lsl.w #8,d3
- lsl.w #4,d4
- or.w d4,d3
- or.w d5,d3
- move.l (a0)+,a1
- move.w d3,(a1)
- dbra d1,.colloop
- dbra d0,.fadeloop
- move.l main_wbaddress,a1
- move.l main_wbcolours,d0
- mulu #6,d0
- move.l $4.w,a6
- jsr -210(a6)
- .exit:
- ENDIF
- rts
-
- main_fadeinwbfix:
- IFND main_faderoff
- tst.l main_wbaddress
- beq.w .exit
- move.l main_wbcolours,d1
- subq.w #1,d1
- move.l main_wbaddress,a0
- .sync: move.l $dff004,d2
- and.l #$1ff00,d2
- cmp.l #308*$100,d2
- beq.s .sync
- .sync1: move.l $dff004,d2
- and.l #$1ff00,d2
- cmp.l #308*$100,d2
- bne.s .sync1
- .colloop: move.w (a0)+,d2
- move.l (a0)+,a1
- move.w #(main_rgbfadefrom&$f),(a1)
- dbra d1,.colloop
- .exit:
- ENDIF
- rts
-
- main_wbcolours: dc.l 0
- main_wbaddress: dc.l 0
- ENDIF
-
- main_storevectors:
- move.l main_vbrbase,a0 ; VBR base address
- move.l a0,a3 ; VBR base address
- addq.l #8,a0 ; Ptr to first vector
- lea main_oldvectors,a1 ; Ptr to old vectors
- IFND main_disableint
- lea .trapvcode,a2 ; Ptr to trap code
- ENDIF
- move.w #main_vectortrap,d1 ; Get vectors to trap
- moveq.l #9,d0 ; #of vectors
- .loop: move.l (a0)+,(a1)+ ; Save vector
- IFND main_disableint
- btst d0,d1 ; Trap vector ?
- beq.s .notrap ; Not !
- move.l a2,-4(a0) ; Set new vector
- .notrap: add.l #.lenchk-.trapvcode,a2 ; Next trap vector code
- ENDIF
- dbra d0,.loop ; Next vector
- move.l a3,a0 ; First vector
- add.w #$64,a3 ; First int vector
- moveq.l #6,d0 ; 7 int vectors
- .intloop: move.l (a3)+,(a1)+ ; Save vector
- dbra d0,.intloop
- move.b $bfec01,main_lastkey
- IFND main_disableint
- move.l #main_level3int,$6c(a0) ; Set to our level 3
- IFD main_trap7
- move.l #main_level7int,$7c(a0) ; Set to our level 7
- ENDIF
- ENDIF
- rts
- IFND main_disableint
- .trapvcode: move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #1,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- .lenchk: jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #2,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #3,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #4,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #5,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #6,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #7,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #8,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #9,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.w #10,56(a0) ; main_trappedvector
- move.l (a7)+,a0
- jmp main_interrupt
- ENDIF
-
- main_restorevectors:
- move.l main_vbrbase,a0 ; VBR base address
- move.l a0,a3 ; VBR base address
- addq.l #8,a0 ; Ptr to first vector
- lea main_oldvectors,a1 ; Ptr to old vectors
- moveq.l #9,d0 ; #of vectors
- .loop: move.l (a1)+,(a0)+ ; Restore vector
- dbra d0,.loop ; Next vector
- add.w #$64,a3 ; First in vector
- moveq.l #6,d0 ; 7 int vectors
- .intloop: move.l (a1)+,(a3)+ ; Save vector
- dbra d0,.intloop
- rts
-
- IFND main_disableint
-
- main_interrupt: IFND MAIN_DEBUGOFF
- jmp main_verticalint
- ENDIF
- IFD MAIN_DEBUGOFF
- move.l a0,.old
- move.l main_dataptr,a0
- move.l 58(a0),$02(a7) ; Main_ExitAddy
- move.l .old,a0
- rte
- .old: dc.l 0
- ENDIF
-
- IFD main_trap7
- main_level7int: move.l a0,-(a7)
- move.l main_vbrbase,a0
- move.l #.rte,$7c(a0)
- move.l (a7)+,a0
- .loop: cmp.l #main_level7int,$02(a7)
- beq.s .notok
- cmp.l #.rte,$02(a7)
- bne.s .ok
- .notok: addq.l #6,a7
- bra.s .loop
- .ok: move.w #12,main_trappedvector
- .loop2: cmp.l #main_level7int,$02(a7)
- beq.s .notok2
- cmp.l #.rte,$02(a7)
- bne.s .ok2
- .notok2: addq.l #6,a7
- bra.s .loop2
- .ok2: jmp main_interrupt
- .rte: rte
- ENDIF
-
-
- *************************************************************************
- * Interrupt related routines *
- *************************************************************************
-
- main_level3int: btst.b #4,$dff01f ; COP int ?
- bne.s main_copperint ; Yes
- btst.b #5,$dff01f ; VBL int ?
- bne.s main_verticalint ; Yes
- btst.b #6,$dff01f ; BLT int ?
- bne.s main_blitterint ; Yes
- rte ; ?????
-
- main_copperint: movem.l d0-a6,-(a7)
- move.l main_dataptr,a0
- move.l 28(a0),a0 ; Get COPint ptr
- cmp.l #0,a0
- beq.s .noint
- jsr (a0)
- .noint: movem.l (a7)+,d0-a6
- move.w #$0010,$dff09c ; Clear REQ bits
- rte
-
- main_blitterint:movem.l d0-a6,-(a7)
- move.l main_dataptr,a0
- move.l 24(a0),a0 ; Get BLTInt ptr
- cmp.l #0,a0
- beq.s .noint
- jsr (a0)
- .noint: movem.l (a7)+,d0-a6
- move.w #$0040,$dff09c ; Clear REQ bits
- rte
-
- main_verticalint:
- tst.w main_novbl
- bne.w .noclose
- move.l a7,main_registers+15*4 ; Save SP
- lea main_registers+15*4,a7 ; Register ptr
- movem.l d0-a6,-15*4(a7)
- move.l (a7),a7 ; Restore SP
- move.w (a7),main_usersr ; Save SR
- move.l 2(a7),main_userpc ; Save user PC
- .skippr: movem.l d0-a6,-(a7) ; Save registers
- IFND main_debugoff
- tst.w main_configscreen ; Is configscreen up ?
- bne.w .configint ; Yes do special config int
- ENDIF
- tst.w main_forcedebug
- bne.w .forcedebug
- move.l main_dataptr,a0
- tst.w 56(a0) ; main_trappedvector
- bne.w .forcedebug
- IFND main_noexit
- IFD main_usermb
- clr.w main_readakey
- btst #2,$dff016 ; Right mouse buttom ?
- beq.w .forcedebug ; Yepp...
- ENDIF
- IFD main_uselmb
- clr.w main_readakey
- btst #6,$bfe001 ; Left mouse buttom ?
- beq.s .forcedebug ; Yepp...
- ENDIF
- ENDIF
- IFND main_debugoff
- tst.w main_contrace
- bne.w .forcedebug
- ENDIF
- .continue: move.l main_dataptr,a0
- addq.l #1,(a0) ; Increase main counter
- addq.l #1,4(a0) ; Increase counter
- addq.l #1,main_counter2
- tst.l 8(a0) ; Timer countdown?
- beq.s .nodectimer ; Nopie..
- subq.l #1,8(a0) ; Decrease timer
- .nodectimer: tst.l 12(a0) ; main_Timer countdown?
- beq.s .nodectimer1 ; Nopie..
- subq.l #1,12(a0) ; Decrease main_timer
- .nodectimer1: move.l 16(a0),d0 ; Get VBLint
- beq.s .skipcustom
- move.l d0,a0
- jsr (a0)
- .skipcustom: move.l main_dataptr,a0
- move.l 20(a0),d0 ; Get VBLInt2
- beq.s .skipcustom2
- move.l d0,a0
- jsr (a0)
- .skipcustom2:
- ;------------------------------------------- Music stuff --
- IFND main_playeroff
- tst.w main_play
- beq .noplay
- main_musicplay
- .noplay: move.l main_dataptr,a0
- move.l 32(a0),d0 ; Get MAIN_MOdule
- beq.s .stopmusic
- cmp.l #-1,32(a0)
- beq.s .skipmusic
- move.l d0,a0
- sub.l a1,a1
- main_musicinit
- move.l main_dataptr,a0
- move.l #-1,32(a0) ; Clear main_module
- st.b main_play
- bra.s .skipmusic
- .stopmusic: main_musicstop
- move.l main_dataptr,a0
- move.l #-1,32(a0)
- .skipmusic:
- ENDIF
- ;----------------------------------------------- Music end --
-
- IFND main_meteroff
- bsr.w main_frameint
- ENDIF
- .exitint:
- IFD main_length
- tst.l main_timer
- bne.s .skipquit
- move.l #main_exit,main_userpc
- .skipquit:
- ENDIF
- movem.l (a7)+,d0-a6 ; Restore registers
- move.l main_userpc,2(a7) ; Restore PC
- IFND main_debugoff
- tst.w main_configexit ; Close config ?
- beq.s .noclose ; Nopie...
- move.w #0,main_configexit ; Clear flag
- move.w #0,main_configscreen ; Clear flag
- move.w main_configsr,(a7) ; Restore SR
- move.l main_configpc,2(a7) ; Restore PC
- move.l a7,main_configregs+15*4 ; Save sp
- lea main_configregs+15*4,a7 ; Ptr to saved registers
- movem.l -15*4(a7),d0-a6
- move.l (a7),a7
- ENDIF
- move.l a0,-(a7)
- move.l main_vbrbase,a0
- IFD main_trap7
- move.l #main_level7int,$7c(a0)
- ENDIF
- move.l (a7)+,a0
- .noclose: move.w #$0020,$dff09c ; Clear REQ bits
- rte
- ;------------------------------------ Force debug mode --
- .forcedebug: move.l main_dataptr,a0
- tst.w 36(a0)
- beq.s .ok2exit
- st.b main_forcedebug
- bra.w .continue
- .ok2exit: cmp.w #14,56(a0) ; main_trappedvector
- bge.w .continue
-
- clr.w main_forcedebug
- IFD main_debugoff
- move.l main_dataptr,a0
- tst.l 52(a0) ; main_exitaddy
- beq.w .continue
- move.l 52(a0),main_userpc ; main_exitaddy
- bra.s .exitint
- ENDIF
- IFND main_debugoff
- st.b main_configscreen ; Set flag
- move.w main_usersr,main_configsr; Save for later exit
- move.l main_userpc,main_configpc; Save for later exit
- move.l #main_config,main_userpc; Run config routine
- lea main_registers,a0 ; Save...
- lea main_configregs,a1
- moveq.l #15,d0
- .saveregloop: move.l (a0)+,(a1)+
- dbra d0,.saveregloop ;...registers
- ENDIF
- .configint:
- IFND main_debugoff
- tst.w main_contrace
- bne.s .trace
- lea main_configcop,a0
- lea $dff000,a6
- .conloop: move.l (a0)+,d0
- cmp.l #-2,d0
- beq.s .conexit
- move.w d0,d1
- swap.w d0
- move.w d1,(a6,d0.w)
- bra.s .conloop
- .conexit: bsr.w main_mousemove
- addq.l #1,main_concounter
- moveq.l #0,d0
- moveq.l #0,d1
- move.w main_concurx,d0
- lsl.w #3,d0
- move.w main_concury,d1
- lsl.w #4,d1
- add.w #128*2,d0
- add.w #$28*2+main_coninpwin*16,d1
- move.l main_configscr,a0
- add.l #20480+8+44,a0
- move.l main_concounter,d2
- and.l #$1f,d2
- and.l #$10,d2
- beq.s .skipblink
- moveq.l #0,d0
- .skipblink: bsr.w main_setspritepos
- bsr.w kbd_kbdlevel3
- .trace:
- ENDIF
- bra.w .exitint
-
- ENDIF ; Main_DisableInt
-
- *************************************************************************
- * Configscreen related routines *
- *************************************************************************
-
- main_config:
- IFND main_debugoff
- move.l a7,main_conoldsp
- tst.l main_configscr ; Screen alocated ?
- beq.s main_conquit ; Quit instead !!
- tst.w main_contrace
- beq.s .cont ; Not tracing
- move.l main_dataptr,a0
- tst.w 56(a0) ; main_trappedvector
- bne.s .cont ; Tracing !!
- .loop: btst #2,$dff016
- beq.s .cont
- move.b $bfec01,d0
- move.b main_lastkey,d1
- move.b d0,main_lastkey
- cmp.b d0,d1
- bne.s .cont
- btst #6,$bfe001
- bne.s .loop
- .loop1: btst #6,$bfe001
- beq.s .loop1
- bra.s main_conexit
- .cont: clr.w main_contrace
- bsr.w kbd_flushbuffer
- bsr.w main_consaveall ; Save all
- bsr.w main_concode
- bra.s main_conexit ; Exit
- main_conquit: move.l main_dataptr,a0
- tst.l 52(a0) ; Main_exitaddy
- beq.s .skippqqq0
- move.l #main_exit,52(a0)
- .skippqqq0: move.l 52(a0),main_configpc ; Just exit
- main_conexit: move.l main_dataptr,a0
- move.l 52(a0),d0 ; Main_exitaddy
- cmp.l main_configpc,d0
- beq.s .skippcfix
- move.w 56(a0),d0 ; main_trappedvector,d0
- lsl.w #3,d0
- lea main_vectorlist,a0
- move.l 4(a0,d0.w),d0
- add.l d0,main_configpc
- move.l main_dataptr,a0
- clr.w 56(a0) ; main_trappedvector
- .skippcfix: move.l main_conoldsp,a7
- bsr.w main_conrestoreall
- st.b main_configexit ; Set exit flag
- move.b $bfec01,main_lastkey
- .sloop: bra.s .sloop
-
- main_consaveall:lea $dff000,a6 ; Custom base address
- move.w #1,main_contrace
- .waitvbl: move.l $04(a6),d0 ; Wait 4...
- and.l #$1ff00,d0
- cmp.l #301*256,d0
- bne.s .waitvbl ;...some frames
- .waitvbl1: move.l $04(a6),d0 ; Wait 4...
- and.l #$1ff00,d0
- cmp.l #300*256,d0
- bne.s .waitvbl1 ;...some frames
- move.w $1e(a6),main_conintreq ; Save intreq
- move.w #$3fdf,$9c(a6) ; Clear intreq
- move.w $1c(a6),main_conintena ; Save intena
- move.w #$3fdf,$9a(a6) ; Disable interrupts
- move.w $02(a6),main_condmacon ; Save dmacon
- move.w #$7fff,$96(a6) ; Clear dma
- IFND main_skipsysinfo
- tst.w main_aga
- beq.s .skippa
- lea $dff000,a6
- lea main_concols,a0
- move.w #$0100,$0104(a6) ; Read Ram
- move.w #$0000,$0106(a6)
- move.w $180(a6),(a0)+
- move.w $182(a6),(a0)+
- move.w $1a2(a6),(a0)+
- move.w $1a4(a6),(a0)+
- move.w $1ba(a6),(a0)+
- move.w $1bc(a6),(a0)+
- move.w $1be(a6),(a0)
- move.w #$0000,$0104(a6)
- ENDIF
- .skippa: clr.w main_contrace
- move.w #$8320,$96(a6) ; Enable bpldma+Sprite
- move.l main_vbrbase,a0
- move.l $68(a0),kbd_oldlevel2
- move.l #kbd_kbdlevel2,$68(a0)
- move.w #$8008,$9a(a6)
- rts
-
- main_conrestoreall:lea $dff000,a6 ; Custom base address
- .keyrel: tst.b kbd_keypressed
- bne.s .keyrel
- move.w #$3fdf,$9a(a6) ; Disable all interrupts intena
- .waitvbl2: move.l $04(a6),d0 ; Get Rast pos
- and.l #$1ff00,d0 ; Mask out vertical bits
- cmp.l #301*256,d0 ; Wait row
- bne.s .waitvbl2 ; Not reached
- move.l main_vbrbase,a0
- move.l kbd_oldlevel2,$68(a0)
- or.w #$c000,main_conintena ; Set set bit
- or.w #$8000,main_conintreq ; Set set bit
- or.w #$8200,main_condmacon ; Set set bit
- .waitvbl3: move.l $04(a6),d0 ; Get Rast pos
- and.l #$1ff00,d0 ; Mask out vertical bits
- cmp.l #300*256,d0 ; Wait row
- bne.s .waitvbl3 ; Not reached
- move.w main_conintena,$9a(a6) ; Restore INTENA
- move.w #$3fdf,$9c(a6) ; Clear INTREQ
- move.w main_conintreq,$9c(a6) ; Restore INTREQ
- move.w #$7fff,$96(a6) ; Clear ALL DMA
- move.w main_condmacon,$96(a6) ; Restore DMA
- IFND main_skipsysinfo
- tst.w main_aga
- beq.s .skippa
- lea main_concols,a0
- move.w #$0000,$0104(a6)
- move.w #$0000,$0106(a6)
- move.w (a0)+,$180(a6)
- move.w (a0)+,$182(a6)
- move.w (a0)+,$1a2(a6)
- move.w (a0)+,$1a4(a6)
- move.w (a0)+,$1ba(a6)
- move.w (a0)+,$1bc(a6)
- move.w (a0),$1be(a6)
- ENDIF
- .skippa: rts
-
- main_coninpwin = 6
-
- main_conprintxy:;in: d0,d1,a0=x,y,strptr
- move.w d0,d6
- move.w d1,d7
- .newpos: move.w d6,d0
- move.w d7,d1
- add.w #main_coninpwin,d1
- muls #80*8,d1 ; Calc..
- add.l main_configscr,d1
- move.l d1,d2
- add.l d0,d1
- move.l d1,a1 ; ..Scrptr
- lea main_font,a2 ; Font ptr
- moveq.l #0,d0
- move.w #$00ff,d1
- .loop: move.b (a0)+,d0 ; Get char
- beq.w .exit ; Zero=End of text
- cmp.b #10,d0
- bne.s .skipsr
- moveq.l #0,d6
- bra.w .newpos
- .skipsr: cmp.b #13,d0
- bne.s .skiplf
- addq.l #1,d7
- cmp.w #28-main_coninpwin,d7
- blt.s .noscroll
- moveq.l #27-main_coninpwin,d7
- move.l main_configscr,a5
- add.l #8*80*main_coninpwin,a5
- move.l a5,a4
- add.l #8*80,a4
- movem.l a0/d6-d7,-(a7)
- move.w #2*(248-24-main_coninpwin*8)-1,d0
- moveq.l #40,d1
- .copyloop: movem.l (a4)+,d2-a3
- movem.l d2-a3,(a5)
- add.l d1,a5
- dbra d0,.copyloop
- moveq.l #0,d1
- move.l d1,d2
- move.l d1,d3
- move.l d1,d4
- move.l d1,d5
- move.l d1,d6
- move.l d1,d7
- move.l d1,a0
- move.l d1,a1
- move.l d1,a2
- move.w #2*8-1,d0
- .clrloop: movem.l d1-a2,-(a4)
- dbra d0,.clrloop
- movem.l (a7)+,a0/d6-d7
- .noscroll: bra.w .newpos
- .skiplf: addq.w #1,d6
- and.w d1,d0
- lsl.w #3,d0
- move.b 1(a2,d0.l),1*80(a1)
- move.b 2(a2,d0.l),2*80(a1)
- move.b 3(a2,d0.l),3*80(a1)
- move.b 4(a2,d0.l),4*80(a1)
- move.b 5(a2,d0.l),5*80(a1)
- move.b 6(a2,d0.l),6*80(a1)
- move.b 7(a2,d0.l),7*80(a1)
- move.b (a2,d0.l),(a1)+
- bra.w .loop
- .exit: move.w d6,main_concurx
- move.w d7,main_concury
- rts
-
- main_conprint: ;a0=Ptr to text
- moveq.l #0,d0
- move.w main_concurx,d0
- move.w main_concury,d1
- bra.w main_conprintxy
-
- main_conprintdec:;in: d0=Number
- lea main_txtdec,a0
- move.l a0,a1
- move.l a1,a2
- moveq.l #0,d1
- .loop: divu #10,d0
- swap.w d0
- add.b #48,d0
- addq.l #1,d1
- move.b d0,(a2)+
- clr.w d0
- swap.w d0
- tst.l d0
- bne.s .loop
- .ok: move.b #0,(a2)
- asr.w #1,d1
- tst.w d1
- beq.s .skipp
- subq.w #1,d1
- .sloop: move.b (a1),d0
- move.b -(a2),(a1)+
- move.b d0,(a2)
- dbra d1,.sloop
- .skipp: bra.w main_conprint
-
- main_conprinthex:;in: d0=Number to print
- lea main_contxthex+8,a0
- lea main_conhexchars,a1
- moveq.l #0,d1
- moveq.l #7,d2
- .loop: move.b d0,d1
- and.b #$f,d1
- move.b (a1,d1.l),-(a0)
- lsr.l #4,d0
- dbra d2,.loop
- bra.w main_conprint
-
- main_conprinthex4:;in: d0=Number to print
- lea main_contxthex+8,a0
- lea main_conhexchars,a1
- moveq.l #0,d1
- moveq.l #3,d2
- .loop: move.b d0,d1
- and.b #$f,d1
- move.b (a1,d1.l),-(a0)
- lsr.l #4,d0
- dbra d2,.loop
- bra.w main_conprint
-
- main_conlf: lea main_contxtlf,a0
- bra.w main_conprint
-
- main_concode: move.l main_concurx,-(a7)
- move.w #2,main_concurx
- move.w #-5,main_concury
- lea main_contxt02,a0
- bsr.w main_conprint
- lea main_configregs,a5
- moveq.l #7,d6
- .regloop0: move.l (a5)+,d0
- movem.l d6/a5,-(a7)
- bsr.w main_conprinthex
- lea main_contxt08,a0
- bsr.w main_conprint
- movem.l (a7)+,d6/a5
- dbra d6,.regloop0
- bsr.w main_conlf
- move.w #2,main_concurx
- lea main_contxt03,a0
- bsr.w main_conprint
- moveq.l #7,d6
- .regloop1: move.l (a5)+,d0
- movem.l d6/a5,-(a7)
- bsr.w main_conprinthex
- lea main_contxt08,a0
- bsr.w main_conprint
- movem.l (a7)+,d6/a5
- dbra d6,.regloop1
- bsr.w main_conlf
- move.w #2,main_concurx
- lea main_contxt01,a0
- bsr.w main_conprint
- move.l main_configpc,d0
- bsr.w main_conprinthex
- lea main_contxt06,a0
- bsr.w main_conprint
- move.w main_usersr,d0
- bsr.w main_conprinthex4
- lea main_contxt05,a0
- bsr.w main_conprint
- move.w main_condmacon,d0
- bsr.w main_conprinthex4
- lea main_contxt07,a0
- bsr.w main_conprint
- move.w main_conintena,d0
- bsr.w main_conprinthex4
- lea main_contxt09,a0
- bsr.w main_conprint
- move.w main_conintreq,d0
- bsr.w main_conprinthex4
- move.w #2,main_concurx
- addq.w #1,main_concury
- lea main_contxt20,a0
- bsr.w main_conprint
- move.l main_dataptr,a0
- move.w 56(a0),d0 ; main_trappedvector,d0
- lsl.w #3,d0
- lea main_vectorlist,a0
- move.l (a0,d0.w),a0
- bsr.w main_conprint
- move.l (a7)+,main_concurx
- tst.w main_confirst
- bne.w .skipsi;------------------------ Run first time only --
- move.w #1,main_confirst
- moveq.l #$5f,d0
- moveq.l #0,d1
- move.l #main_macro0,d2
- bsr.w kbd_setmacro
- move.l main_concurx,-(a7)
- lea main_contxt16,a0
- move.w #1,main_concurx
- move.w #24,main_concury
- bsr.w main_conprint
- move.l (a7)+,main_concurx
- move.l main_configscr,a0
- move.l a0,a1
- add.l #5*80,a1
- move.l a1,a2
- add.l #79,a2
- moveq.l #3,d0
- move.b #$c0,d1
- moveq.l #80,d3
- moveq.l #38,d2
- .yloopq: move.b d1,(a1)
- move.b d0,(a2)
- add.l d3,a1
- add.l d3,a2
- dbra d2,.yloopq
- add.l #236*80,a0
- move.b #$c0,d0
- bsr.w .drawline
- add.l #17,a0
- moveq.l #$01,d0
- bsr.w .drawline
- addq.l #1,a0
- move.b #$80,d0
- bsr.w .drawline
- add.l #15,a0
- moveq.l #$01,d0
- bsr.s .drawline
- addq.l #1,a0
- move.b #$80,d0
- bsr.s .drawline
- add.l #12,a0
- moveq.l #$01,d0
- bsr.s .drawline
- addq.l #1,a0
- move.b #$80,d0
- bsr.s .drawline
- add.l #19,a0
- moveq.l #$01,d0
- bsr.s .drawline
- addq.l #1,a0
- move.b #$80,d0
- bsr.s .drawline
- add.l #12,a0
- moveq.l #$03,d0
- bsr.s .drawline
- move.l main_configscr,a0
- move.l a0,a3
- add.l #4*80,a3
- add.l #(5*8+4)*80,a0
- move.l a0,a1
- add.l #24*8*80,a1
- move.l a1,a2
- add.l #2*8*80,a2
- moveq.l #-1,d0
- moveq.l #19,d1
- .dlineloop: move.l d0,(a0)+
- move.l d0,(a1)+
- move.l d0,(a2)+
- move.l d0,(a3)+
- dbra d1,.dlineloop
- lea main_contxt00,a0
- bsr.w main_conprint
- bsr.w main_conprintsi
- bra.s .skipsi
- .drawline: moveq.l #15,d1
- move.l a0,a1
- .yloop0: move.b d0,(a1)
- add.l #80,a1
- dbra d1,.yloop0
- rts
- .skipsi: move.w #0,main_concurx
- subq.w #1,main_concury
- .nextcommand: bsr.w kbd_flushbuffer
- ;------------------------------------------------------------- Input routine --
- lea main_contxt04,a0
- bsr.w main_conprint
- lea main_inputbuffer,a0
- move.l a0,a6
- bsr.w main_conprint
- .loop: btst #6,$bfe001
- bne.s .nomouse
- move.w main_mousezone,d0
- cmp.w #-1,d0
- beq.s .nomouse
- lsl.w #2,d0
- lea main_zonecodes,a0
- move.l (a0,d0.w),a0
- .mkrelloop: btst #6,$bfe001
- beq.s .mkrelloop
- jsr (a0)
- bra.s .loop
- .nomouse: bsr.w kbd_readkey
- tst.b d0
- beq.s .loop
- cmp.w #32,d0
- blt.s .special
- cmp.w #128,d0
- blt.s .ok
- cmp.w #160,d0
- blt.s .special
- .ok: move.w main_inputlength,d1
- cmp.w #79,d1
- bge.s .loop
- move.b d0,(a6,d1.w)
- clr.b 1(a6,d1.w)
- lea main_contxt13,a0
- move.b d0,(a0)
- bsr.w main_conprint
- addq.w #1,main_inputlength
- bra.s .loop
- .special: cmp.b #8,d0
- beq.s .del
- cmp.b #13,d0
- beq.s .enter
- cmp.b #27,d0
- beq.s .esc
- bra.w .loop
- .esc: clr.l (a6)
- clr.w main_inputlength
- move.w #1,main_concurx
- lea main_contxt15,a0
- bsr.w main_conprint
- move.w #1,main_concurx
- bra.w .loop
- .del: tst.w main_inputlength
- beq.w .loop
- move.w main_inputlength,d1
- subq.w #1,d1
- move.b #0,(a6,d1.w)
- move.w d1,main_inputlength
- subq.w #1,main_concurx
- lea main_contxt13,a0
- move.b #32,(a0)
- bsr.w main_conprint
- subq.w #1,main_concurx
- bra.w .loop
- .enter: tst.w main_inputlength
- beq.w .nextcommand
- bsr.w main_conlf
- lea main_commandlist,a0
- .cmdloop: move.l a6,a1
- tst.b (a0)
- beq.w .nocmdfound
- .testloop: move.b (a0)+,d0
- move.b (a1)+,d1
- cmp.b #0,d0
- bne.s .cont
- cmp.b #0,d1
- beq.s .foundcode
- cmp.b #32,d1
- beq.s .foundcode
- bra.s .nextcode
- .cont: cmp.b d0,d1
- beq.s .testloop
- .moreloop: tst.b (a0)+
- bne.s .moreloop
- .nextcode: addq.l #4,a0
- move.l a0,d0
- and.b #$1,d0
- beq.s .cmdloop
- addq.l #1,a0
- bra.s .cmdloop
- .foundcode: move.l a0,d0
- and.b #$1,d0
- beq.s .skipeven
- addq.l #1,a0
- .skipeven: move.l (a0)+,a0
- clr.l (a6)
- move.w #0,main_inputlength
- .keyrelloop: tst.b kbd_keypressed
- bne.s .keyrelloop
- jsr (a0)
- bra.w .nextcommand
- .nocmdfound: lea main_contxt14,a0
- bsr.w main_conprint
- clr.l (a6)
- move.w #0,main_inputlength
- bra.w .nextcommand
- .exitcon: rts
-
- main_cmdtest: movem.l d0-a6,-(a7)
- lea main_contxt18,a0
- bsr.w main_conprint
- lea test,a1
- moveq.l #7,d1
- .loop0: move.l (a1)+,d0
- movem.l d1/a1,-(a7)
- bsr.w main_conprinthex
- lea main_contxt08,a0
- bsr.w main_conprint
- movem.l (a7)+,d1/a1
- dbra d1,.loop0
- lea main_contxt19,a0
- bsr.w main_conprint
- lea test+4*8,a1
- moveq.l #7,d1
- .loop1: move.l (a1)+,d0
- movem.l d1/a1,-(a7)
- bsr.w main_conprinthex
- lea main_contxt08,a0
- bsr.w main_conprint
- movem.l (a7)+,d1/a1
- dbra d1,.loop1
- bsr.w main_conlf
- bsr.w main_conlf
- lea main_contxt10,a0
- bsr.w main_conprint
- move.l main_dataptr,a0
- move.l 8(a0),d0 ; Get timer
- bsr.w main_conprinthex
- lea main_contxt11,a0
- bsr.w main_conprint
- move.l main_dataptr,a0
- move.l 4(a0),d0 ; Get counter
- bsr.w main_conprinthex
- lea main_contxt12,a0
- bsr.w main_conprint
- move.l main_dataptr,a0
- move.l (a0),d0
- bsr.w main_conprinthex
- bsr.w main_conlf
- movem.l (a7)+,d0-a6
- rts
-
- main_cmdcont: move.l #.exit,(a7)
- .exit: rts
-
- main_cmdtrace: move.w #-1,main_contrace
- move.l #.exit,(a7)
- .exit: rts
-
- main_cmdexit: move.l #.exit,(a7)
- move.l a0,-(a7)
- move.l main_dataptr,a0
- move.l 52(a0),main_configpc ; Just exit main_exitaddy
- move.l (a7)+,a0
- .exit: rts
-
- main_cmdview: movem.l d0-a6,-(a7)
- bsr.w main_conrestoreall
- st.b main_novbl
- move.b $bfec01,main_lastkey
- .loop: move.b $bfec01,d0
- move.b main_lastkey,d1
- move.b d0,main_lastkey
- cmp.b d0,d1
- bne.s .exit
- btst #2,$dff016
- beq.s .exit
- btst #6,$bfe001
- bne.s .loop
- .exit: btst #6,$bfe001
- beq.s .exit
- bsr.w main_consaveall
- clr.w main_novbl
- bsr.w kbd_flushbuffer
- movem.l (a7)+,d0-a6
- rts
-
- main_cmdhelp: movem.l d0-a6,-(a7)
- lea main_contxt17,a0
- bsr.w main_conprint
- movem.l (a7)+,d0-a6
- rts
-
-
- main_cmdmeteron:movem.l d0-a6,-(a7)
- IFND main_meteroff
- bsr.w main_framemeteron
- ENDIF
- movem.l (a7)+,d0-a6
- rts
-
- main_cmdmeteroff:movem.l d0-a6,-(a7)
- IFND main_meteroff
- bsr.w main_framemeteroff
- ENDIF
- movem.l (a7)+,d0-a6
- rts
-
- main_cmddi: movem.l d0-a6,-(a7)
- lea main_contxt00,a0
- bsr.w main_conprint
- movem.l (a7)+,d0-a6
- rts
-
- main_cmdhelp2: movem.l d0-a6,-(a7)
- .loop: btst #6,$bfe001
- beq.s .loop
- lea main_macro0,a5
- .cpkloop: move.b (a5)+,d0
- beq.s .exitikloop
- bsr.w kbd_insertkey
- bra.s .cpkloop
- .exitikloop: movem.l (a7)+,d0-a6
- rts
-
- main_cmdscop: movem.l d0-a6,-(a7)
- IFND main_skipsysinfo
- lea main_copfound,a2
- lea main_coptext00,a0
- bsr.w main_conprint
- move.l main_copaddy,d0
- addq.l #4,d0
- and.l #-2,d0
- move.l d0,a0
- moveq.l #0,d2
- move.l main_chipmem,d0
- .searchloop0: move.w (a0),d1
- move.l d2,(a2)
- addq.l #2,a0
- cmp.l a0,d0
- beq.w .notfound
- cmp.w main_copins0,d1
- bne.s .searchloop0
- move.l a0,a1
- subq.l #2,a1
- move.l a1,main_copaddy
- .searchloop1: move.w (a1),d1
- subq.l #4,a1
- cmp.l #0,a1
- blt.s .searchloop0
- btst #0,d1
- bne.s .searchloop1
- cmp.w #$040,d1
- blo.s .oktop
- cmp.w #$1fe,d1
- bls.s .searchloop1
- .oktop: addq.l #8,a1
- move.l a1,main_copfound
- .searchloop2: move.w (a1),d1
- addq.l #4,a1
- cmp.l d0,a1
- beq.s .notfound
- cmp.w main_copins1,d1
- beq.s .foundcopper
- btst #0,d1
- bne.s .searchloop2
- cmp.w #$040,d1
- blo.s .searchloop0
- cmp.w #$1fe,d1
- bhi.w .searchloop0
- bra.s .searchloop2
- .foundcopper: lea main_coptext01,a0
- bsr.w main_conprint
- move.l main_copfound,d0
- bsr.w main_conprinthex
- bra.s .found
- .notfound: move.l d2,(a2)
- lea main_coptext02,a0
- bsr.w main_conprint
- .found: bsr.w main_conlf
- ENDIF
- movem.l (a7)+,d0-a6
- rts
-
- main_cmdcopadd: movem.l d0-a6,-(a7)
- move.l main_copfound,d0
- beq.s .nocop
- addq.l #4,d0
- move.l d0,main_copfound
- move.l d0,-(a7)
- lea main_coptext03,a0
- bsr.w main_conprint
- move.l (a7)+,d0
- bsr.w main_conprinthex
- bra.s .exit
- .nocop: lea main_coptext04,a0
- bsr.w main_conprint
- .exit: bsr.w main_conlf
- movem.l (a7)+,d0-a6
- rts
-
- main_cmdcopsub: movem.l d0-a6,-(a7)
- move.l main_copfound,d0
- beq.s .nocop
- subq.l #4,d0
- move.l d0,main_copfound
- move.l d0,-(a7)
- lea main_coptext03,a0
- bsr.w main_conprint
- move.l (a7)+,d0
- bsr.w main_conprinthex
- bra.s .exit
- .nocop: lea main_coptext04,a0
- bsr.w main_conprint
- .exit: bsr.w main_conlf
- movem.l (a7)+,d0-a6
- rts
-
- main_cmdcopview:movem.l d0-a6,-(a7)
- move.l main_copfound,d0
- beq.s .nocop
- move.l d0,-(a7)
- lea main_coptext03,a0
- bsr.w main_conprint
- move.l (a7),d0
- bsr.w main_conprinthex
- move.l (a7)+,d0
- move.l d0,a6
- moveq.l #7,d0
- .loop: move.l d0,-(a7)
- move.l a6,d0
- bsr.w main_conprinthex
- lea main_coptext05,a0
- bsr.w main_conprint
- moveq.l #0,d0
- move.w (a6)+,d0
- bsr.w main_conprinthex4
- lea main_coptext06,a0
- bsr.w main_conprint
- moveq.l #0,d0
- move.w (a6)+,d0
- bsr.w main_conprinthex4
- bsr.w main_conlf
- move.l (a7)+,d0
- dbra d0,.loop
- bra.s .exit
- .nocop: lea main_coptext04,a0
- bsr.w main_conprint
- .exit: bsr.w main_conlf
- movem.l (a7)+,d0-a6
- rts
-
-
- main_copaddy: dc.l 0
- main_copfound: dc.l 0
- main_copins0: dc.w $0100
- main_copins1: dc.w $ffff
-
- main_coptext00: dc.b 10,13,'Searching for copper list ...',0
- main_coptext01: dc.b 'Found at: $',0
- main_coptext02: dc.b 'Not found !!',0
- main_coptext03: dc.b 10,13,'Copper at: $',0
- main_coptext04: dc.b 10,13,'No copper in memory !!',0
- main_coptext05: dc.b ': dc.w $',0
- main_coptext06: dc.b ',$',0
- even
-
- main_conprintsi:
- IFND main_sysinfooff
- lea main_txtpower,a0
- bsr.w main_conprint
- move.l main_powptr,a0
- bsr.w main_conprint
- lea main_txtproc,a0
- bsr.w main_conprint
- move.l main_procptr,a0
- bsr.w main_conprint
- lea main_txtcoproc,a0
- bsr.w main_conprint
- move.l main_coprocptr,a0
- bsr.w main_conprint
- lea main_txtmmu,a0
- bsr.w main_conprint
- move.l main_mmuptr,a0
- bsr.w main_conprint
- lea main_txtaga,a0
- bsr.w main_conprint
- move.l main_gfxptr,a0
- bsr.w main_conprint
- lea main_txtvbl,a0
- bsr.w main_conprint
- move.l main_refreshptr,a0
- bsr.w main_conprint
- lea main_txtmemchip,a0
- bsr.w main_conprint
- move.l main_chipmem,d0
- lsr.l #8,d0
- lsr.l #2,d0
- bsr.w main_conprintdec
- lea main_txtmemfast,a0
- bsr.w main_conprint
- move.l main_fastmem,d0
- lsr.l #8,d0
- lsr.l #2,d0
- bsr.w main_conprintdec
- lea main_txtkblf,a0
- bsr.w main_conprint
- ENDIF
- rts
-
- main_mousemove: move.w $dff00a,d0
- move.w main_mouseold,d1
- move.w d0,main_mouseold
- move.w d0,d2
- move.w d1,d3
- and.w #$ff,d0
- and.w #$ff,d1
- lsr.w #8,d2
- lsr.w #8,d3
- sub.b d0,d1
- sub.b d2,d3
- ext.w d1
- ext.w d3
- neg.w d1
- neg.w d3
- move.w main_mousex,d4
- move.w main_mousey,d5
- add.w d1,d4
- add.w d3,d5
- cmp.w #0,d4
- bge.s .okx0
- moveq.l #0,d4
- .okx0: cmp.w main_mousewidth,d4
- ble.s .okx1
- move.w main_mousewidth,d4
- .okx1: cmp.w #0,d5
- bge.s .oky0
- moveq.l #0,d5
- .oky0: cmp.w main_mouseheight,d5
- ble.s .oky1
- move.w main_mouseheight,d5
- .oky1: move.w d4,main_mousex
- move.w d5,main_mousey
- move.w d4,d0
- move.w d5,d1
- moveq.l #8,d2
- sub.w main_mousesprx,d0
- sub.w main_mousespry,d1
- add.w main_mouseorgx,d0
- add.w main_mouseorgy,d1
- move.l main_mousesprptr,d2
- beq.s .skipspr
- move.l d2,a0
- bsr.w main_setspritepos
- .skipspr: move.w main_mousex,d0
- move.w main_mousey,d1
- moveq.l #-1,d2
- move.l d2,d7
- lea main_mousezones,a0
- .mzloop: addq.w #1,d2
- movem.w (a0)+,d3-d6 ; Get X0
- move.l (a0)+,a1
- cmp.w #-1,d3
- beq.s .exit
- cmp.w d0,d3
- bgt.s .mzloop
- cmp.w d1,d4
- bgt.s .mzloop
- cmp.w d0,d5
- blt.s .mzloop
- cmp.w d1,d6
- blt.s .mzloop
- move.w d2,d7
- cmp.l #0,a1
- beq.s .skip
- movem.l d0-a6,-(a7)
- jsr (a1)
- movem.l (a7)+,d0-a6
- .skip: bra.s .mzloop
- .exit: move.w d7,main_mousezone
- rts
-
- main_setspritepos:;in: a0,d0,d1=Sprite ptr,Xpos,Ypos
- moveq.l #0,d2
- move.b 2(a0),d2
- moveq.l #0,d3
- move.b (a0),d3
- sub.w d3,d2
- bge.s .heightok
- add.w #$100,d2
- .heightok: moveq.l #0,d3 ; Ctrl byte
- move.w d0,d4
- asr.w #1,d0
- btst #0,d4
- beq.s .noctrl3
- or.w #%10000,d3 ; AGA...
- .noctrl3: asr.w #1,d1
- move.w d1,d4
- and.w #$ff,d4
- move.b d4,(a0)
- btst #8,d1
- beq.s .noctrl0
- or.w #%100,d3
- .noctrl0: add.w d2,d1
- move.w d1,d4
- and.w #$ff,d4
- move.b d4,2(a0)
- btst #8,d1
- beq.s .noctrl1
- or.w #%10,d3
- .noctrl1: move.w d0,d1
- lsr.w #1,d0
- move.b d0,1(a0)
- btst #0,d1
- beq.s .noctrl2
- or.w #%1,d3
- .noctrl2: move.b d3,3(a0)
- rts
-
- *************************************************************************
- * Non OS readkeyboard routine by Equalizer/TBL (Hints from Sag) *
- * With: - keymap translation (Raw to ASCII, Keyboard definer in AMOS) *
- * - keyboard buffering (255 chars) *
- * - keyboard repetition *
- *************************************************************************
-
- kbd_shift = $01
- kbd_ctrl = $02
- kbd_alt = $04
- kbd_lamiga = $08
- kbd_ramiga = $10
-
- ;------------------------------------------------------- KeyBoard interrupts --
-
- kbd_kbdlevel3:;------------------------------------- Level 3 (VBL) interrupt --
- tst.b kbd_keypressed
- beq.s .rts
- move.w kbd_repttimerw,d0
- bne.s .wait
- move.w kbd_repttimers,d0
- bne.s .waitspeed
- move.w kbd_reptspeed,kbd_repttimers
- move.w kbd_asciikey,d0
- bsr.w kbd_insertkey
- bra.s .rts
- .waitspeed: subq.w #1,d0
- move.w d0,kbd_repttimers
- bra.s .rts
- .wait: subq.w #1,d0
- move.w d0,kbd_repttimerw
- .rts: rts
-
- kbd_kbdlevel2: movem.l d0-a6,-(a7) ;--------------------- Level 2 interrupt --
- btst #3,$bfed01
- beq .quit
- move.b $bfec01,d0
- move.b d0,kbd_realraw
- move.b #0,kbd_keypressed
- move.w kbd_reptwait,kbd_repttimerw
- move.w kbd_reptspeed,kbd_repttimers
- btst #0,d0
- beq.s .skippa
- move.b #1,kbd_keypressed
- .skippa: neg.b d0
- add.b #$ff,d0
- ror.b #1,d0
- and.w #$ff,d0
- move.b d0,kbd_rawkey
- .skip: lea kbd_flagcodes,a0
- moveq.l #7,d1
- .cloop: cmp.b (a0)+,d0
- bne.s .noflagset
- bset.b d1,kbd_realflags ; Set flag bit
- .noflagset: cmp.b 8-1(a0),d0
- bne.s .noflagsclr
- bclr.b d1,kbd_realflags ; Clear flag bit
- .noflagsclr: dbra d1,.cloop
- .noflag: lea $dff006,a6
- bsr .waitrow
- bset #6,$bfee01
- bsr .waitrow
- move.b #0,$bfec01
- bsr .waitrow
- bclr #6,$bfee01
- bsr .waitrow
- ;-------------------------------------------------------- Raw to asciibuffer --
- moveq.l #0,d3
- move.b kbd_rawkey,d3
- cmp.w #128,d3
- bge.w .exit ; Strange rawcode?
- cmp.w #0,d3
- beq.w .exit
- moveq.l #0,d1 ; Flags.
- moveq.l #0,d2
- move.b kbd_realflags,d2 ; KeyB Flags
- btst #0,d2 ; Caps
- beq.s .skip0
- or.b #$1,d1
- .skip0: btst #1,d2 ; Ctrl
- beq.s .skip1
- or.b #$2,d1
- .skip1: btst #2,d2 ; LShift
- beq.s .skip2
- or.b #$1,d1
- .skip2: btst #3,d2 ; LAlt
- beq.s .skip3
- or.b #$4,d1
- .skip3: btst #4,d2 ; LAmiga
- beq.s .skip4
- or.b #$8,d1
- .skip4: btst #5,d2 ; RAmiga
- beq.s .skip5
- or.b #$10,d1
- .skip5: btst #6,d2 ; RAlt
- beq.s .skip6
- or.b #$4,d1
- .skip6: btst #7,d2 ; RShift
- beq.s .skip7
- or.b #$1,d1
- .skip7: move.b d1,kbd_flags
- lsl.w #7,d1
- add.w d3,d1
- lsl.l #1,d1
- add.l kbd_keymapptr,d1
- move.l kbd_keymapptr,d7
- bne.s .qqq
- add.l #kbd_keydefault,d1
- .qqq: move.l d1,a1
- move.w (a1),d2
- move.w d2,kbd_asciikey
- move.w d2,d0
- bsr.w kbd_insertkey
- .exit: move.l kbd_customptr,d0
- beq.s .quit
- move.l d0,a0
- jsr (a0)
- .quit: move.w #$0008,$dff09c
- movem.l (a7)+,d0-a6
- rte
- .waitrow: move.b (a6),d0
- addq.w #2,d0
- .loop: cmp.b (a6),d0
- bne.s .loop
- rts
- ;----------------------------------------------------- Ascii buffer routines --
-
- *************************************************************************
- kbd_setascii: ; Changes an ascii value for a special RAW code *
- * in: d0.w,d1.w,d2.w=Raw value,Flags,New ASCII *
- *************************************************************************
- move.l kbd_keymapptr,d3
- bne.s .skip
- move.l #kbd_keydefault,d3
- .skip: move.l d3,a0
- and.l #$1f,d1
- lsl.w #7,d1
- add.w d0,d1
- lsl.l #1,d1
- and.w #$ff,d2
- move.w d2,(a0,d1.l)
- rts
-
- *************************************************************************
- kbd_setmacro:; Sets a macro for a special RAW code *
- * in: d0.w,d1.w,d2.l=Raw value,Flags,String ptr *
- *************************************************************************
- move.l kbd_keymapptr,d3
- bne.s .skip
- move.l #kbd_keydefault,d3
- .skip: move.l d3,a0
- and.l #$1f,d1
- lsl.w #7,d1
- add.w d0,d1
- move.w d1,d3
- or.w #$8000,d3
- lsl.l #1,d1
- move.w d3,(a0,d1.l)
- lsl.l #1,d1
- move.l kbd_macroptr,d3
- beq.s .skip1
- move.l d3,a0
- move.l d2,(a0,d1.l)
- .skip1: rts
-
- *************************************************************************
- kbd_setcode:; Sets a code for a special RAW code *
- * in: d0.w,d1.w,d2.l=Raw value,Flags,Code ptr *
- *************************************************************************
- or.l #$80000000,d2 ; Special codeptr
- bra.s kbd_setmacro
-
-
- *************************************************************************
- kbd_insertkey: ;Inserts an ASCII-code into the keyboard buffer *
- * in: d0=ASCII-code *
- *************************************************************************
- move.w d0,d2
- .inkey: lea kbd_buffer,a0
- moveq.l #0,d0
- moveq.l #0,d1
- move.b (a0)+,d0 ; d0=head ptr
- move.b (a0)+,d1 ; d1=tail ptr
- addq.w #2,d0
- andi.w #$ff,d0
- cmp.w d0,d1 ; head=tail=full !!
- beq.w .exit
- subq.w #1,d0
- andi.w #$ff,d0
- move.b d0,-2(a0) ; Save new head
- lsl.w #1,d0
- move.w d2,(a0,d0.w)
- .exit: rts
-
- *************************************************************************
- kbd_readkey: ; Reads an ASCII-code form keyboard buffer *
- * Out: d0=ASCII-code (0=No key) *
- *************************************************************************
- movem.l d1-a6,-(a7)
- .next: moveq.l #0,d0
- tst.b kbd_macroread
- bne.s .domacro
- lea kbd_buffer,a0
- move.b (a0)+,d1
- move.b (a0)+,d2
- cmp.b d1,d2
- beq.s .rts ; Equal=Empty
- addq.w #1,d2
- and.w #$ff,d2
- move.b d2,-1(a0)
- lsl.w #1,d2
- move.w (a0,d2.w),d0
- move.w d0,d2
- and.w #$3fff,d0
- lsr.w #8,d2
- lsr.w #6,d2
- cmp.w #%10,d2
- beq.s .fixmacro
- and.w #$ff,d0
- .rts: movem.l (a7)+,d1-a6
- rts
- .fixmacro: move.w d0,d2
- and.l #$3fff,d2
- move.l kbd_macroptr,d1
- beq.s .skipmacall
- lsl.l #2,d2
- move.l d1,a0
- move.l (a0,d2.l),d1
- beq.s .rts
- btst #31,d1
- bne.s .codemacro
- move.l d1,kbd_macropos
- .domacro: move.l kbd_macropos,a0
- clr.b kbd_macroread
- moveq.l #0,d0
- move.b (a0)+,d0
- beq.w .next
- st.b kbd_macroread
- move.l a0,kbd_macropos
- bra.s .rts
- .codemacro: and.l #$7fffffff,d1
- move.l d1,a5
- movem.l d0-a6,-(a7)
- jsr (a5)
- movem.l (a7)+,d0-a6
- .skipmacall: bra.w .next
-
- *************************************************************************
- kbd_flushbuffer: ; Clears keyboard buffer *
- *************************************************************************
- move.b kbd_buffer,kbd_buffer+1
- rts
-
- *****************************************************************
- * RAW-Code for some special function keys. *
- * help $5f *
- * up $4c *
- * down $4d *
- * left $4f *
- * right $4e *
- * return $44 *
- * space $40 *
- * esc $45 *
- * enter $43 *
- * tab $42 *
- *****************************************************************
-
- ENDIF
-
-
- main_play: dc.w 0
-
- *************************************************************************
- * Configuration related data *
- *************************************************************************
-
- IFND main_meteroff
- IFND main_debugoff
-
- main_framemeteron:
- move.l main_configscr,d0
- beq.w .exit
- tst.w .first
- bne.s .skip
- st.b .first
- move.w $dff002,main_framedma
- and.w #%100000,main_framedma
- move.l d0,a0
- add.l #20480+1024,a0
- move.l #$28d82802,(a0)+
- ;-------------------------------------- Sprite 6 --
- move.w #255,d0
- move.l #$ffff0000,d1
- .fillloop: move.l d1,(a0)+
- dbra d0,.fillloop
- clr.l (a0)+
- ;-------------------------------------- Sprite 7 --
- move.l #$28d82802,(a0)+
- lea main_framesprite,a1
- move.w #1024/4-1,d0
- .copyloop: move.l (a1)+,(a0)+
- dbra d0,.copyloop
- clr.l (a0)
- lea $dff000,a6
- .sync: cmp.b #$ff,$dff006
- bne.s .sync
-
- move.w #$e002,$106(a6)
- move.w #$0f0,$1ba(a6)
- move.w #$003,$1bc(a6)
- move.w #$fff,$1be(a6)
- .skip: st.b main_frameon
- .exit: rts
- .first: dc.w 0
-
- main_framemeteroff:
- tst.w main_framedma
- bne.s .skip
- move.w #%100000,$dff096
- .skip: clr.w main_frameon
- rts
-
- main_framedma: dc.w 0
- main_frameon: dc.w 0
-
-
- main_frameint: tst.w main_frameon
- beq.w .exit
- lea $dff000,a6
- move.w #$8200!%100000,$96(a6)
- move.w #$e002,$106(a6)
- move.l #$0f00003,$1ba(a6)
- move.w #$e002,$106(a6)
- move.w #$fff,$1be(a6)
- move.l main_configscr,a0
- add.l #20480+1024,a0
- move.l main_dataptr,a1
- move.l 48(a1),d0
- divu #313*4,d0
- cmp.w #255,d0
- ble.s .ok
- move.w #255,d0
- .ok: cmp.w #0,d0
- bge.s .ok4
- moveq.l #0,d0
- .ok4:
- ;-------------------------- d0=0-255 --
- neg.w d0
- add.w #255,d0
- add.w #$28,d0
- moveq.l #$2,d1 ; CTRL
- cmp.w #$100,d0
- blt.s .ok1
- or.w #$4,d1
- .ok1: move.b d0,(a0)
- add.w #256,d0
- cmp.w #256+$28,d0
- ble.s .ok2
- move.w #256+$38,d0
- .ok2: move.b d0,2(a0)
- move.b d1,3(a0)
- move.w #$3f,$104(a6)
- move.w #$ff,$10c(a6)
- move.l main_configscr,a0
- add.l #20480,a0
- tst.w main_framedma
- bne.s .skipcl
- lea $dff120,a6
- moveq.l #5,d0
- .loop: move.l a0,(a6)+
- dbra d0,.loop
- bra.s .cont
- .skipcl: add.l #6*4,a6
- .cont: add.l #1024+1024+8,a0
- move.l a0,(a6)+
- sub.l #1024+8,a0
- move.l a0,(a6)
- .exit: rts
-
- main_framesprite:
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$ffff0000
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $9e013eaa,$82015754,$84012eaa,$e5f11404
- dc.l $88012aaa,$88015d54,$88012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffc10014
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $8e012eaa,$90015554,$90013aaa,$dcf11d04
- dc.l $92013aaa,$92015754,$8c012eaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffc10014
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $9e013eaa,$90015554,$90013aaa,$ddf11c04
- dc.l $82012aaa,$92015754,$8c012eaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffc10014
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $92013aaa,$92015754,$92013aaa,$def11f04
- dc.l $82012aaa,$82015754,$82012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffc10014
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $8c012eaa,$92015754,$82012aaa,$ecf11d04
- dc.l $82012aaa,$92015754,$8c012eaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffc10014
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$8c015d54,$92013aaa,$c2f11704
- dc.l $84012eaa,$88015d54,$9e013eaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffc10014
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $84012eaa,$8c015d54,$84012eaa,$f5f10404
- dc.l $84012eaa,$84015554,$8e012eaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffc10014
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$803f5540
- dc.l $80012aaa,$80015554,$80012aaa,$80015554
- dc.l $80012aaa,$80015554,$80012aaa,$ffff0000
- ENDIF
- ENDIF
-
-
- IFND MAIN_DEBUGOFF
-
- main_contxt00: dc.b 13,10,' NonSystem startup v3.1 - Copyright TBL 1995.'
- dc.b 13,10,' Debugger v1.0 - Copyright TBL 1995.'
- dc.b 13,10,13,10
- dc.b ' Coded by Equalizer of The Black Lotus.',13,10
- dc.b 13,10
- dc.b 0
- main_contxt01: dc.b 'PC: ',0
- main_contxtlf: dc.b 10,13,0
- main_contxt02: dc.b 'D0: ',0
- main_contxt03: dc.b 'A0: ',0
- main_contxt04: dc.b 10,13,'>',0
- main_contxt05: dc.b ' dma: ',0
- main_contxt06: dc.b ' SR: ',0
- main_contxt07: dc.b ' intena: ',0
- main_contxt08: dc.b ' ',0
- main_contxt09: dc.b ' intreq: ',0
- main_contxt10: dc.b ' timer: ',0
- main_contxt11: dc.b ' counter: ',0
- main_contxt12: dc.b ' main_counter: ',0
- main_contxt13: dc.b 0,0
- main_contxt14: dc.b 10,13,'Unknown command !!!',10,13,0
- main_contxt15: blk.b 79,32
- dc.b 0
- main_contxt16: dc.b 'Continue program Exit to system View screen'
- dc.b ' Run frame by frame Commands',0
- main_contxt17: dc.b 13,10,' # Help',13,10,13,10
- dc.b " 'j' Continue program "
- dc.b " '!' Exit to system",13,10
- dc.b " 'v' View program screen "
- dc.b " 'f' Run frame by frame",13,10
- dc.b " 'hi' Hardware info "
- dc.b " 'help' Display commands",13,10
- dc.b " 't' View variables (Timer,Counters & Test:)",13,10
- dc.b " 'di' View debugger info (Version etc.)",13,10
- dc.b " 'scop' Search fro copperlist in memory",13,10
- dc.b " 'vcop' View copper list (Text)",13,10
- dc.b " 'copadd' Adds 4 to copper address.",13,10
- dc.b " 'copsub' Subtracts 4 to copper address.",13,10
- dc.b " 'meteron' Enable frame meter.",13,10
- dc.b " 'meteroff' Disable frame meter.",13,10
- dc.b 0
- main_contxt18: dc.b 13,10,' test: ',0
- main_contxt19: dc.b 13,10,' ',0
- main_contxt20: dc.b 'Debugger called by: ',0
-
- main_conhexchars:dc.b '0123456789abcdef'
- main_contxthex: dc.b '00000000',0
-
- IFND main_debugoff
-
- main_macro0: dc.b 27,'help',13,0
- even
- main_commandlist:dc.b 'hi',0,0
- dc.l main_conprintsi
- dc.b 'j',0
- dc.l main_cmdcont
- dc.b '!',0
- dc.l main_cmdexit
- dc.b 'v',0
- dc.l main_cmdview
- dc.b 't',0
- dc.l main_cmdtest
- dc.b 'f',0
- dc.l main_cmdtrace
- dc.b 'di',0,0
- dc.l main_cmddi
- dc.b 'help',0,0
- dc.l main_cmdhelp
- dc.b 'scop',0,0
- dc.l main_cmdscop
- dc.b 'copadd',0,0
- dc.l main_cmdcopadd
- dc.b 'copsub',0,0
- dc.l main_cmdcopsub
- dc.b 'vcop',0,0
- dc.l main_cmdcopview
- dc.b 'meteron',0
- dc.l main_cmdmeteron
- dc.b 'meteroff',0,0
- dc.l main_cmdmeteroff
- dc.l 0
-
- main_mouseold: dc.w 0
- main_mousex: dc.w 0 ; X Pos
- main_mousey: dc.w 0 ; Y Pos
- main_mouseorgx: dc.w 128*2 ; X Org
- main_mouseorgy: dc.w $28*2 ; Y Org
- main_mousesprx: dc.w 6 ; Sprite X
- main_mousespry: dc.w 6 ; Sprite Y
- main_mousesprptr:dc.l 0 ; Sprite ptr
- main_mousewidth:dc.w 640 ; Sprite zone width
- main_mouseheight:dc.w 512 ; Sprite zone height
- main_mousezone: dc.w -1 ; Reports current mousezone
-
- main_zonecodes: dc.l main_cmdcont
- dc.l main_cmdexit
- dc.l main_cmdview
- dc.l main_cmdtrace
- dc.l main_cmdhelp2
-
- main_mousezones:dc.w 0,472,143,504
- dc.l 0
- dc.w 144,472,271,504
- dc.l 0
- dc.w 272,472,375,504
- dc.l 0
- dc.w 376,472,537,504
- dc.l 0
- dc.w 538,472,639,504
- dc.l 0
- dc.w -1,-1,-1,-1 ; No more mousezones..
- dc.l 0 ; Blahhh
-
- main_inputlength:dc.w 0
- main_inputbuffer:blk.b 128
-
- main_mousesprite:dc.l $48605000
- dc.w %1001001000000000,%1000001000000000
- dc.w %0000000000000000,%0000000000000000
- dc.w %0000000000000000,%0001000000000000
- dc.w %1000001000000000,%0010100000000000
- dc.w %0000000000000000,%0001000000000000
- dc.w %0000000000000000,%0000000000000000
- dc.w %1001001000000000,%1000001000000000
- dc.w %0000000000000000,%0000000000000000
- dc.l 0,0
- main_curssprite:dc.l $48605000
- dc.w %1111000000000000,%0000000000000000
- dc.w %1001000000000000,%0110000000000000
- dc.w %1001000000000000,%0110000000000000
- dc.w %1001000000000000,%0110000000000000
- dc.w %1001000000000000,%0110000000000000
- dc.w %1001000000000000,%0110000000000000
- dc.w %1001000000000000,%0110000000000000
- dc.w %1111000000000000,%0000000000000000
- dc.l 0,0
-
- main_confirst: dc.w 0
- main_concurx: dc.w 0 ; Config screen XCursor
- main_concury: dc.w 0 ; Config screen YCursor
-
- main_font: dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $00000000,$00000000,$183c3c18,$18001800
- dc.l $6c6c0000,$00000000,$6c6cfe6c,$fe6c6c00
- dc.l $183e603c,$067c1800,$00c6cc18,$3066c600
- dc.l $386c6876,$dccc7600,$18183000,$00000000
- dc.l $0c183030,$30180c00,$30180c0c,$0c183000
- dc.l $00663cff,$3c660000,$0018187e,$18180000
- dc.l $00000000,$00181830,$0000007e,$00000000
- dc.l $00000000,$00181800,$03060c18,$3060c000
- dc.l $3c666e7e,$76663c00,$18381818,$18187e00
- dc.l $3c66061c,$30667e00,$3c66061c,$06663c00
- dc.l $1c3c6ccc,$fe0c1e00,$7e607c06,$06663c00
- dc.l $1c30607c,$66663c00,$7e66060c,$18181800
- dc.l $3c66663c,$66663c00,$3c66663e,$060c3800
- dc.l $00181800,$00181800,$00181800,$00181830
- dc.l $0c183060,$30180c00,$00007e00,$007e0000
- dc.l $30180c06,$0c183000,$3c66060c,$18001800
- dc.l $7cc6dede,$dec07800,$183c3c66,$7ec3c300
- dc.l $fc66667c,$6666fc00,$3c66c0c0,$c0663c00
- dc.l $f86c6666,$666cf800,$fe666078,$6066fe00
- dc.l $fe666078,$6060f000,$3c66c0ce,$c6663e00
- dc.l $6666667e,$66666600,$7e181818,$18187e00
- dc.l $0e060606,$66663c00,$e6666c78,$6c66e600
- dc.l $f0606060,$6266fe00,$82c6eefe,$d6c6c600
- dc.l $c6e6f6de,$cec6c600,$386cc6c6,$c66c3800
- dc.l $fc66667c,$6060f000,$386cc6c6,$c66c3c06
- dc.l $fc66667c,$6c66e300,$3c667038,$0e663c00
- dc.l $7e5a1818,$18183c00,$66666666,$66663e00
- dc.l $c3c36666,$3c3c1800,$c6c6c6d6,$feeec600
- dc.l $c3663c18,$3c66c300,$c3c3663c,$18183c00
- dc.l $fec68c18,$3266fe00,$3c303030,$30303c00
- dc.l $c0603018,$0c060300,$3c0c0c0c,$0c0c3c00
- dc.l $10386cc6,$00000000,$00000000,$000000fe
- dc.l $18180c00,$00000000,$00003c06,$1e663b00
- dc.l $e0606c76,$66663c00,$00003c66,$60663c00
- dc.l $0e06366e,$66663b00,$00003c66,$7e603c00
- dc.l $1c363078,$30307800,$00003b66,$663cc67c
- dc.l $e0606c76,$6666e600,$18003818,$18183c00
- dc.l $06000606,$0606663c,$e060666c,$786ce600
- dc.l $38181818,$18183c00,$00006677,$6b636300
- dc.l $00007c66,$66666600,$00003c66,$66663c00
- dc.l $0000dc66,$667c60f0,$00003d66,$663e0607
- dc.l $0000ec76,$6660f000,$00003e60,$3c067c00
- dc.l $08183e18,$181a0c00,$00006666,$66663b00
- dc.l $00006666,$663c1800,$0000636b,$6b363600
- dc.l $00006336,$1c366300,$00006666,$663c1870
- dc.l $00007e4c,$18327e00,$0e181870,$18180e00
- dc.l $18181818,$18181800,$7018180e,$18187000
- dc.l $729c0000,$00000000,$cc33cc33,$cc33cc33
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $7e666666,$66667e00,$7e666666,$66667e00
- dc.l $00000000,$00000000,$18001818,$3c3c1800
- dc.l $0c3e6c6c,$3e0c0000,$1c363078,$30307e00
- dc.l $423c663c,$42000000,$c3663c18,$3c183c00
- dc.l $18181800,$18181800,$3c403c66,$3c023c00
- dc.l $66000000,$00000000,$7e819db1,$b19d817e
- dc.l $304888f8,$00fc0000,$003366cc,$66330000
- dc.l $3e060000,$00000000,$00007e7e,$00000000
- dc.l $7e81b9b9,$b1a9817e,$7e000000,$00000000
- dc.l $3c663c00,$00000000,$18187e18,$18007e00
- dc.l $f0183060,$f8000000,$f0183018,$f0000000
- dc.l $18300000,$00000000,$0000c6c6,$c6eefac0
- dc.l $7ef4f474,$14141400,$00001818,$00000000
- dc.l $00000000,$00001830,$30703030,$30000000
- dc.l $70888870,$00f80000,$00cc6633,$66cc0000
- dc.l $2063262c,$19336701,$2063262c,$1b316207
- dc.l $c023662c,$d9336701,$18001830,$60663c00
- dc.l $30083c66,$7ec3c300,$0c103c66,$7ec3c300
- dc.l $18243c66,$7ec3c300,$718e3c66,$7ec3c300
- dc.l $c3183c66,$7ec3c300,$3c663c66,$7ec3c300
- dc.l $1f3c3c6f,$7ccccf00,$3c66c0c0,$663c0830
- dc.l $6010fe60,$7860fe00,$1820fe60,$7860fe00
- dc.l $3048fe60,$7860fe00,$6600fe60,$7860fe00
- dc.l $30087e18,$18187e00,$0c107e18,$18187e00
- dc.l $18247e18,$18187e00,$66007e18,$18187e00
- dc.l $f86c66f6,$666cf800,$718ec6e6,$d6cec600
- dc.l $30083c66,$c3663c00,$0c103c66,$c3663c00
- dc.l $18243c66,$c3663c00,$718e3c66,$c3663c00
- dc.l $c33c66c3,$c3663c00,$0063361c,$36630000
- dc.l $3d66cfdb,$f366bc00,$30086666,$66663e00
- dc.l $0c106666,$66663e00,$18246666,$66663e00
- dc.l $66006666,$66663e00,$0608c366,$3c183c00
- dc.l $f0607e63,$637e60f0,$7c66666c,$66666c60
- dc.l $30083c06,$1e663b00,$0c103c06,$1e663b00
- dc.l $18243c06,$1e663b00,$718e3c06,$1e663b00
- dc.l $33003c06,$1e663b00,$3c663c06,$1e663b00
- dc.l $00007e1b,$7fd87700,$00003c66,$60663c10
- dc.l $30083c66,$7e603c00,$0c103c66,$7e603c00
- dc.l $18243c66,$7e603c00,$66003c66,$7e603c00
- dc.l $30083818,$18183c00,$0c103818,$18183c00
- dc.l $18243818,$18183c00,$66003818,$18183c00
- dc.l $60fc187c,$c6c67c00,$718e7c66,$66666600
- dc.l $30083c66,$66663c00,$0c103c66,$66663c00
- dc.l $18243c66,$66663c00,$718e3c66,$66663c00
- dc.l $66003c66,$66663c00,$0018007e,$00180000
- dc.l $00013e67,$6b733e40,$30086666,$66663b00
- dc.l $0c106666,$66663b00,$18246666,$66663b00
- dc.l $66006666,$66663b00,$0c106666,$663c1870
- dc.l $f0607c66,$667c60f0,$66006666,$663c1870
-
- main_concols: blk.w 7
-
- main_configcop: dc.l $01009200,$01020000,$01040024,$01060000,$010c0011
- dc.l $01fc0000,$01080000,$010a0000,$01800000,$018200f0
- dc.l $01ba0888,$01bc0bbb,$01be0eee,$01a200d0,$01a400a0
- dc.l $008e2881,$009028c1,$0092003c,$009400d4
- main_conbplptrs:dc.l $00e00000,$00e20000
- main_consprptr: dc.l $01200000,$01220000,$01240000,$01260000
- dc.l $01280000,$012a0000,$012c0000,$012e0000
- dc.l $01300000,$01320000,$01340000,$01360000
- dc.l $01380000,$013a0000,$013c0000,$013e0000
- dc.l $fffffffe
- main_conoldsp: dc.l 0
- main_concounter:dc.l 0 ; Up 1 every VBL
-
- ;----------------------------------------------------------- Keyboard data --
-
- kbd_oldlevel2: dc.l 0 ; For saving level 2
- kbd_reptwait: dc.w 10 ; VBL's until rept
- kbd_reptspeed: dc.w 0 ; Rept speed
- kbd_repttimerw: dc.w 0 ; Timer for rept wait
- kbd_repttimers: dc.w 0 ; Timer for rept speed
- kbd_flagcodes: dc.b $61,$65,$67,$66,$64,$60,$63,$62
- dc.b $e1,$e5,$e7,$e6,$e4,$e0,$e3,$e2
- kbd_realflags: dc.b 0 ; Cps,Ctl,LSh,LAlt,LAm,RAm,RAlt,RSh
- kbd_flags: dc.b 0
- kbd_realraw: dc.b 0 ; Input real raw
- kbd_rawkey: dc.b 0 ; The raw value of the keypress
- kbd_keypressed: dc.b 0 ; Keypressed flag, 0=Not pressed
- kbd_macroread: dc.b 0 ; Read from macro buffer flag.
- kbd_macropos: dc.l 0 ; Macro read pos
- kbd_asciikey: dc.w 0 ; Last ascii code
- kbd_customptr: dc.l 0 ; Custom routine on every key event
- kbd_keymapptr: dc.l 0 ; Ptr to keymap (0=Default)
- kbd_macroptr: dc.l 0 ; Ptr to macro list (0=No macros)
- kbd_keydefault: dc.l $00600031,$00320033,$00340035,$00360037
- dc.l $00380039,$0030002b,$0027005c,$00000030
- dc.l $00710077,$00650072,$00740079,$00750069
- dc.l $006f0070,$00e500a8,$00000031,$00320033
- dc.l $00610073,$00640066,$00670068,$006a006b
- dc.l $006c00f6,$00e40027,$00000034,$00350036
- dc.l $003c007a,$00780063,$00760062,$006e006d
- dc.l $002c002e,$002d0000,$002e0037,$00380039
- dc.l $00200008,$0009000d,$000d001b,$007f0000
- dc.l $00000000,$002d0000,$00800081,$00830082
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$005b005d,$002f002a,$002b00a0
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $007e0021,$002200a3,$00240025,$0026002f
- dc.l $00280029,$003d003f,$006000a6,$00000030
- dc.l $00510057,$00450052,$00540059,$00550049
- dc.l $004f0050,$00c2005e,$00000000,$00000000
- dc.l $00410053,$00440046,$00470048,$004a004b
- dc.l $004c00d6,$00c4002a,$00000000,$00000000
- dc.l $003e005a,$00580043,$00560042,$004e004d
- dc.l $003b003a,$005f0000,$002e0000,$00000000
- dc.l $00200000,$00090000,$000d001b,$009e0000
- dc.l $00000000,$002d0000,$00840085,$00870086
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$007b007d,$002f002a,$002b00a1
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00600031,$00320033,$00340035,$00360037
- dc.l $00380039,$0030002b,$0027005c,$00000000
- dc.l $00710077,$00650072,$00740079,$00750069
- dc.l $006f0070,$00e500a8,$00000000,$00000000
- dc.l $00610073,$00640066,$00670068,$006a006b
- dc.l $006c00f6,$00e40027,$00000000,$00000000
- dc.l $003c007a,$00780063,$00760062,$006e006d
- dc.l $002c002e,$002d0000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00880089,$008b008a
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$000000a2
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $006000a1,$00b200b3,$00a40000,$00000000
- dc.l $00000000,$000000bf,$003d0000,$00000000
- dc.l $00710077,$00e900ae,$00740079,$00750069
- dc.l $006f0070,$00e5005e,$00000000,$00000000
- dc.l $00bc00bd,$00be0066,$00670068,$006a006b
- dc.l $006c002c,$002700b7,$00000000,$00000000
- dc.l $003e007a,$007800a9,$00760062,$006e006d
- dc.l $00ab00bb,$002f0000,$00000000,$00000000
- dc.l $00000000,$00000000,$000d0000,$009f0000
- dc.l $00000000,$00000000,$00960097,$00990098
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$000000a3
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $007e0021,$00400023,$00240025,$005e0026
- dc.l $002a0028,$0029005f,$002b00a6,$00000000
- dc.l $00000000,$00c90000,$00000000,$00000000
- dc.l $00000000,$00c5005e,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $0000003a,$0022002a,$00000000,$00000000
- dc.l $003e0000,$00000000,$00000000,$00000000
- dc.l $003c003e,$003f0000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$009e0000
- dc.l $00000000,$00000000,$009a009b,$009d009c
- dc.l $00000000,$00000000,$00000000,$00000000
- dc.l $00000000,$00000000,$00000000,$000000a4
- blk.b 6720
-
- kbd_buffer: dc.b 0,0 ; Head & Tail ptr
- ds.w 256 ; Buffer
-
- main_contrace: dc.w 0 ; Trace flag
- main_configscr: dc.l 0 ; Ptr to bpl for configscr
- main_conintena: dc.w 0 ; Config old intena
- main_conintreq: dc.w 0 ; Config old intreq
- main_condmacon: dc.w 0 ; Config old dma
- main_configsr: dc.w 0 ; Int status reg
- main_configpc: dc.l 0 ; Int userpc
- main_configregs:blk.l 16 ; Registers a7-d0
- main_configexit:dc.w 0 ; Set to 1 to close con screen
- main_configscreen:dc.w 0 ; Flag to indicate if config
- ENDIF
- ENDIF ; main_debugoff
-
- *************************************************************************
- * System related data *
- *************************************************************************
-
- main_readakey: dc.w 0 ; Flag for keyread
- main_vectorlist:
- IFD main_textvaron
- dc.l main_contxt21,0 ; 1 User (Text ptr,PC add)
- dc.l main_contxt22,0 ; 2 Bus
- dc.l main_contxt23,0 ; 3 Address
- dc.l main_contxt24,2 ; 4 Illegal
- dc.l main_contxt25,0 ; 5 Div
- dc.l main_contxt26,0 ; 6 CHK
- dc.l main_contxt27,0 ; 7 TRAPV
- dc.l main_contxt28,0 ; 8 Privilege
- dc.l main_contxt29,0 ; 9 Trace
- dc.l main_contxt30,2 ; 10 Axxx
- dc.l main_contxt31,2 ; 11 Fxxx
- dc.l main_contxt32,0 ; 12 Requierment no ok
- dc.l main_contxt33,0 ; 13 Level 7 external int
- dc.l main_contxt34,0 ; 14 End of program
- dc.l main_contxt35,0 ; 15 Error loading file
- ENDIF
-
- main_counter2: dc.l 0
- main_usersr: dc.w 0 ; Int status reg
- main_userpc: dc.l 0 ; Int userpc
- main_registers: blk.l 16 ; Registers a7-d0
- main_oldvectors:blk.l 17 ; Space for system vectors
- main_oldintena: dc.w 0 ; saved intena
- main_oldintreq: dc.w 0 ; saved intreq
- main_olddmacon: dc.w 0 ; saved dmacon
- main_oldadkcon: dc.w 0 ; saved adkcon
- main_oldactscreen:dc.l 0 ; Saved actscreen
- main_oldcopper1:dc.l 0 ; Ptr to syscop 1
- main_oldcopper2:dc.l 0 ; Ptr to syscop 2
- main_oldbeamcon:dc.w 0 ; Old beamcontrol bits
- main_novbl: dc.w 0 ; Clr to run VBL
- main_forcedebug:dc.w 0 ; Not 0=Debug mode forced
- ENDIF ; main_systemon (VERY large IF)
-
-
- main_printok: dc.b 0 ; Print flag
- main_conuse: dc.b 0 ; Console use flag
- main_gfxhandler:dc.l 0 ; Graphics handler
- main_erraddy: dc.l 0 ; On fail jump to addy..
- main_errsp: dc.l 0 ; On fail new sp
- main_argv: dc.l 0 ; Ptr to arguments
- main_cachereg: dc.l 0 ; Cache reg ptr
- main_cacheok: dc.w 0 ; Ok 2 reset cache ?
- IFND main_short
- test: blk.l 16 ; Test block
- ENDIF
-
-
- IFND main_skipsysinfo
- main_processor: dc.w 0 ; Processor 0=00,1=10 etc
- main_coproc: dc.w 0 ; Math coprocessor 1=Yes
- main_mmu: dc.w 0 ; MMU 1=Yes
- main_aga: dc.w 0 ; AGA chipset 1=Yes
- main_ecs: dc.w 0 ; ECH chipset 1=Yes
- main_chipmem: dc.l 0 ; Chip mem
- main_fastmem: dc.l 0 ; Fast mem
- main_availfast: dc.l 0 ; Largest Fast
- main_availchip: dc.l 0 ; Largest chip
-
- main_refresh: dc.w 0 ; VBL Refresh rate
- main_powerfreq: dc.w 0 ; Power frequency
- main_sysflags: dc.w 0 ; System flags
- main_ok2run: dc.w 0
- ENDIF
-
- IFND main_short
- main_argcount: dc.l 0
- main_arglist: blk.l 16
- main_timer2: dc.l 0 ; Last timer value
- main_savecount: dc.l 0
- main_savecount2:dc.l 0
- ENDIF
-
- *************************************************************************
- * Text related data *
- *************************************************************************
-
- main_lastkey: dc.b 0
- main_doslibname: dc.b 'dos.library',0 ; Doslib name
- main_gfxlibname: dc.b 'graphics.library',0 ; GfxLib name
- main_consolname: dc.b 'con:0/0/640/256/' ; Console name
- main_progname: IFND main_programname
- dc.b 'NoName',0 ; Program name
- ELSE
- main_programname ; Own prog name
- dc.b 0
- ENDIF
-
-
- IFD main_textvaron
- even
- main_powptr: dc.l main_txtpow50 ; Power freq text ptr
- main_refreshptr:dc.l main_txtvbl50 ; Ptr to refresh rate text
- main_gfxptr: dc.l main_txtgfxorg ; Ptr to Gfx chip text
- main_procptr: dc.l main_txt68000 ; Processor text ptr
- main_coprocptr: dc.l main_txtnone ; Math coproc. text ptr
- main_mmuptr: dc.l main_txtnone ; MMU text ptr
-
- main_contxt21: dc.b 'User ',0
- main_contxt22: dc.b 'Bus error ',0
- main_contxt23: dc.b 'Address error ',0
- main_contxt24: dc.b 'Illegal instruction ',0
- main_contxt25: dc.b 'Division by zero error ',0
- main_contxt26: dc.b 'CHK command ',0
- main_contxt27: dc.b 'TRAPV command ',0
- main_contxt28: dc.b 'Privilege violation ',0
- main_contxt29: dc.b 'Trace ',0
- main_contxt30: dc.b 'Axxx command emulation ',0
- main_contxt31: dc.b 'Fxxx command emulation ',0
- main_contxt32: dc.b 'Hardware to lame =8) ',0
- main_contxt33: dc.b 'Level 7 external break ',0
- main_contxt34: dc.b 'End of program reached ',0
- main_contxt35: dc.b 'Error loading file ',0
-
- main_txtnoreq: dc.b 10,13,' No requierments needed',10,13,0
- main_txtreqpass:dc.b 10,13,10,13,' Requirement test passed.',10,13,0
- main_txtreqfault:dc.b 10,13,10,13,' Requirement test failed !!! (lamer:)'
- dc.b 10,13,0
- main_txthi: dc.b '-- Hardware Info --------------------------------'
- dc.b 0
- main_txtreq: dc.b '-- Hardware Requirements ------------------------'
- dc.b 0
- main_txtendc: dc.b '-- Exit Info ------------------------------------'
- dc.b 10,13,' Program terminated by: ',0
- main_txtafter: dc.b 10,13,' Total running length: ',0
- main_txtminute:dc.b ' minute ',0
- main_txtminutes:dc.b ' minutes ',0
- main_txtsecond: dc.b ' second',0
- main_txtseconds:dc.b ' seconds',0
- main_txtand: dc.b 'and ',0
- main_txtnonetime:dc.b '0 seconds',0
- main_txtend: dc.b 10,13
- main_txtblank: dc.b '-------------------------------------------------'
- dc.b 10,13,0
- main_txtplus: dc.b '+ ',0
- main_txtpassed: dc.b '.. passed',0
- main_txtfault: dc.b '.. failed',0
- main_txtecsplus:dc.b 'ECS+ ',0
- main_txtagaplus:dc.b 'AGA+ ',0
- main_txt68000: dc.b '68000',0
- main_txt68010: dc.b '68010',0
- main_txt68020: dc.b '68020',0
- main_txt68030: dc.b '68030',0
- main_txt68040: dc.b '68040',0
- main_txt68060: dc.b '68060',0
- main_txt68881: dc.b '68881',0
- main_txt68882: dc.b '68882',0
- main_txt68040b: dc.b '68040 built in',0
- main_txt68060b: dc.b '68060 built in',0
- main_txt68851: dc.b '68851',0
- main_txtvbl50: dc.b 'PAL (50 Hz) ',0
- main_txtvbl60: dc.b 'NTSC (60 Hz) ',0
- main_txtpow50: dc.b '50 Hz',0
- main_txtpow60: dc.b '60 Hz',0
- main_txtgfxorg: dc.b 'Original Denise (8362)',0
- main_txtgfxecs: dc.b 'Extended chipset (ECS Denise 8373)',0
- main_txtgfxaga: dc.b 'AGA chipset (Lisa)',0
- main_txtkb: dc.b 'kb ',0
- main_txtfast: dc.b 10,13,' Fast-RAM needed: ',0
- main_txtchip: dc.b 10,13,' Chip-RAM needed: ',0
- main_txtpower: dc.b 10,13,' Power frequency: ',0
- main_txtproc: dc.b 10,13,' Processor: ',0
- main_txtcoproc: dc.b 10,13,' Math processor: ',0
- main_txtmmu: dc.b 10,13,' MMU: ',0
- main_txtaga: dc.b 10,13,' Graphic chipset: ',0
- main_txtvbl: dc.b 10,13,' Video frequency: ',0
- main_txtmemchip:dc.b 10,13,10,13,' Chipmem: ',0
- main_txtmemfast:dc.b ' kb',10,13,' Fastmem: ',0
- main_txtcache: dc.b ' All caches disabled.',0
- main_txtnone: dc.b 'None',0
- main_txtlf: dc.b 10,13,0
- main_txtkblf: dc.b ' kb',10,13,0
- main_txtdec: dc.b 0,0,0,0,0,0,0,0,0,0,0,0
- even
- ENDIF
- even
- ENDIF
- cnop 8,8
-
- main_start:
-